Tema: SQL server
Ver Mensaje Individual
  #3 (permalink)  
Antiguo 12/10/2012, 08:22
GeriReshef
 
Fecha de Ingreso: julio-2012
Ubicación: Israel
Mensajes: 360
Antigüedad: 11 años, 10 meses
Puntos: 40
Respuesta: SQL server

Yo lo haría así-
primero que nada crear la tabla con los detalles:

Código SQL:
Ver original
  1. CREATE TABLE #T (Hora INT, Minuto INT);
  2.  
  3. INSERT INTO #T SELECT 12, 1;
  4. INSERT INTO #T SELECT 12, 2;
  5. INSERT INTO #T SELECT 12, 3;
  6. INSERT INTO #T SELECT 12, 4;
  7. INSERT INTO #T SELECT 12, 5;
  8. INSERT INTO #T SELECT 12, 6;
  9. INSERT INTO #T SELECT 12, 17;
  10. INSERT INTO #T SELECT 12, 18;
  11. INSERT INTO #T SELECT 12, 19;
  12. INSERT INTO #T SELECT 12, 20;
  13. INSERT INTO #T SELECT 12, 21;
  14. INSERT INTO #T SELECT 12, 22;
  15. INSERT INTO #T SELECT 12, 33;
  16. INSERT INTO #T SELECT 12, 34;
  17. INSERT INTO #T SELECT 12, 37;
  18. INSERT INTO #T SELECT 13, 20;
  19. INSERT INTO #T SELECT 13, 21;
  20. INSERT INTO #T SELECT 13, 22;
  21. INSERT INTO #T SELECT 13, 23;
  22. INSERT INTO #T SELECT 13, 24;
  23. INSERT INTO #T SELECT 13, 25;

Recuperar los datos en minutos (de lo contrario no podriamos "ver" que después de 12,59 llega 13,00):
Código SQL:
Ver original
  1. SELECT  60*Hora+Minuto AS Minutos,
  2.         *
  3. FROM    #T;

Con el CTE T1 calculamos la resta entre los minutos y el número de la fila (fijate que cada "grupo" tiene la misma resta):
Código SQL:
Ver original
  1. WITH T1 AS
  2. (SELECT 60*Hora+Minuto AS Minutos,
  3.         *
  4. FROM    #T)
  5. SELECT  Minutos-ROW_NUMBER() OVER(ORDER BY Minutos) Nm,
  6.         *
  7. FROM    T1;

Con el CTE T2 calculamos el número de filas en cada "grupo":
Código SQL:
Ver original
  1. WITH T1 AS
  2. (SELECT 60*Hora+Minuto AS Minutos,
  3.         *
  4. FROM    #T),
  5. T2 AS
  6. (SELECT Minutos-ROW_NUMBER() OVER(ORDER BY Minutos) Nm,
  7.         *
  8. FROM    T1)
  9. SELECT  COUNT(*) OVER(Partition BY Nm) Cnt,
  10.         *
  11. FROM    T2;

Con el CTE T3 filtramos las filas así que queden solamente los "grupos" con 6 filas o mas:
Código SQL:
Ver original
  1. WITH T1 AS
  2. (SELECT 60*Hora+Minuto AS Minutos,
  3.         *
  4. FROM    #T),
  5. T2 AS
  6. (SELECT Minutos-ROW_NUMBER() OVER(ORDER BY Minutos) Nm,
  7.         *
  8. FROM    T1),
  9. T3 AS
  10. (SELECT COUNT(*) OVER(Partition BY Nm) Cnt,
  11.         *
  12. FROM    T2)
  13. SELECT  *
  14. FROM    T3
  15. WHERE   Cnt>=6;

Espero que te sirva de ayuda.
__________________
El Castellano no es mi lengua materna: discúlpenme por los errores gramaticales.
Mi blog