2016-12-13 1 views
3

Wie Sie eine Abfrage mit SQL erstellen, um für jede Zeile einen fortlaufenden Tag verfügbar zu machen. Zum Beispiel würde Ich mag 3 Tage mit mindestens 3 Zimmern TischSQL Jede Zeile in Folge verfügbares Datum verfügbar

Original-Tag in Folge finden

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 

mit Ergebnis unter

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 
+0

Ihre Anforderungen erhalten sind überhaupt nicht klar. Warum haben Sie keine Einträge im gewünschten Ergebnis für den 4. bis 6. Dezember in der Spalte "Datum"? – TJB

+0

@TJB aktualisiert mit der Anforderung. 3 Tage in Folge mit mindestens 3 verfügbaren Aktien – hiboss

+0

Noch nicht klar, was ist Ihre Anforderung, bitte erläutern Sie weiter, nicht jeder arbeitet mit Aktien. –

Antwort

2

SQL DEMO

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 

OUTPUT

enter image description here

+0

Wenn Sie SQL 2012+ @ Viki888 haben, ist die Antwort besser. –

3

Versuchen LEAD() -Funktion wie Abfrage unter

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; 

Unten ist der Ausgang I

enter image description here

+2

Dies ist eine gute Antwort unter der Annahme, dass eine ausreichend aktuelle Version von SQL Server vorhanden ist. – iamdave