Ver Mensaje Individual
  #16 (permalink)  
Antiguo 14/12/2012, 10:21
Avatar de Libras
Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 5 meses
Puntos: 774
Respuesta: Select primeras filas de cada rut

Medias raras las condiciones jejejeje
Código SQL:
Ver original
  1. CREATE TABLE #rut
  2.     (
  3.     rut VARCHAR(20),
  4.     dia INT,
  5.     cont INT
  6.     )
  7.      
  8.      
  9.     INSERT INTO #rut VALUES('10000136',1,3)
  10.     INSERT INTO #rut VALUES('10000136',5,1)
  11.     INSERT INTO #rut VALUES('10000136',6,1)
  12.     INSERT INTO #rut VALUES('10004692',17,1)
  13.     INSERT INTO #rut VALUES('10007610',4,2)
  14.     INSERT INTO #rut VALUES('10007610',9,1)
  15.     INSERT INTO #rut VALUES('10007610',11,1)
  16.     INSERT INTO #rut VALUES('10007610',14,1)
  17.     INSERT INTO #rut VALUES('10009703',1,1)
  18.     INSERT INTO #rut VALUES('10012309',12,1)
  19.     INSERT INTO #rut VALUES('10012309',30,1)
  20.     INSERT INTO #rut VALUES('10017575',4,1)
  21.     INSERT INTO #rut VALUES('10017575',10,1)
  22.     INSERT INTO #rut VALUES('10017575',22,1)
  23.     INSERT INTO #rut VALUES('10011111',4,5)
  24.     INSERT INTO #rut VALUES('10011111',10,20)
  25.     INSERT INTO #rut VALUES('10011111',12,1)
  26.      
  27.     CREATE TABLE #resultados
  28.     (
  29.     rut VARCHAR(20),
  30.     dia INT,
  31.     cont INT
  32.     )
  33.  
  34.  
  35.     SELECT DISTINCT(rut), IDENTITY(INT,1,1) rn INTO #temp FROM #rut
  36.  
  37.    
  38.     DECLARE @x INT
  39.     DECLARE @rut VARCHAR(20)
  40.     DECLARE @mayor INT
  41.     DECLARE @nuevo INT
  42.     DECLARE @y INT
  43.     DECLARE @dia INT
  44.     DECLARE @tot INT
  45.     SET @x=1
  46.     SET @y=1
  47.     SET @mayor=0
  48.     SET @nuevo=0
  49.    
  50.     while @x<=(SELECT COUNT(*) FROM #temp)
  51.     BEGIN
  52.         SET @nuevo=0
  53.         SET @mayor=0
  54.         SET @y=1    
  55.         SET @tot=0
  56.         SELECT @rut=rut FROM #temp WHERE rn=@x 
  57.         SELECT *,IDENTITY(INT,1,1) rn INTO #temp2 FROM #rut WHERE rut=@rut
  58. --      select * from #rut where rut='10007610'
  59.         while @y<=(SELECT COUNT(*) FROM #temp2)
  60.           BEGIN        
  61.             IF @y=1
  62.                 SELECT @nuevo=cont FROM #temp2 WHERE rn=@y 
  63.             SELECT @mayor=cont FROM #temp2 WHERE rn=@y 
  64.             IF @nuevo<@mayor
  65.                 SET @nuevo=@mayor
  66.             IF @nuevo=@mayor
  67.                 SET @tot=@tot+1        
  68.             SET @y=@y+1
  69.           END
  70.         IF @tot=(SELECT COUNT(*) FROM #temp2)
  71.             SELECT @dia=MIN(dia) FROM #temp2                       
  72.         ELSE
  73.             SELECT @dia=dia FROM #temp2 WHERE cont=@nuevo
  74.         print @tot 
  75.         print @rut
  76.         print @nuevo
  77.         print @dia
  78.         INSERT INTO #resultados  
  79.         SELECT * FROM #rut WHERE rut=@rut AND cont=@nuevo AND dia=@dia  
  80.         DROP TABLE #temp2
  81.         SET @x=@x+1
  82.     END
  83.    
  84.     SELECT * FROM #resultados
  85. --    delete from #resultados
  86.    
  87.     DROP TABLE #resultados
  88.     DROP TABLE #temp
  89.     DROP TABLE #rut
  90.    
  91.    
  92. --------------------------

saludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me

Última edición por Libras; 14/12/2012 a las 11:08