Cómo crear una consulta con SQL para que cada fila consecutiva esté disponible. Por ejemplo, me gustaría encontrar 3 días consecutivos con al menos 3 habitaciones disponibles.

Mesa original

Date       Available rooms 
----       ---------------
01/12/16         4
02/12/16         5
03/12/16         5
04/12/16         5
05/12/16         4
06/12/16         0
07/12/16         3
08/12/16         4
09/12/16         4

Con resultado debajo

Date      EndDate       
--------  --------
01/12/16  03/12/16
02/12/16  04/12/16
03/12/16  05/12/16
07/12/16  09/12/16
3
hiboss 13 dic. 2016 a las 16:48

2 respuestas

La mejor respuesta

DEMOSTRACIÓN DE SQL

SELECT T1.[Date], T3.[Date]
FROM Table1 T1
JOIN Table1 T2
  ON T1.[Date] = DATEADD(day, -1, T2.[Date])
JOIN Table1 T3
  ON T1.[Date] = DATEADD(day, -2, T3.[Date])
WHERE T1.[Available rooms] >= 3
  AND T2.[Available rooms] >= 3
  AND T3.[Available rooms] >= 3

SALIDA

enter image description here

2
Juan Carlos Oropeza 13 dic. 2016 a las 14:05

Intente usar la función LEAD () como la siguiente consulta

SELECT d as StartDate, EndDate
FROM
    (SELECT d, 
        CASE 
            WHEN available_rooms > 2 
                AND LEAD(available_rooms,1) OVER(order by d) > 2 
                AND LEAD(available_rooms,2) OVER(order by d) > 2 
            THEN LEAD(d,2) OVER(order by d) 
        END EndDate
    FROM table1 t) t1
WHERE EndDate is not null;

A continuación se muestra la salida que recibí

enter image description here

3
Viki888 13 dic. 2016 a las 14:06