2017-06-09 1 views
1

Ich habe Mühe, einen effektiven, prägnanten Weg ohne eine Schleife zu finden, um Gruppen von aktiven Daten zu erzeugen, bei denen Aktivität (Gewähren/Zurückziehen) ist basierend auf der Spalte Switch, die Werte 0 off und 1 on sowie Start- und Enddatum hat.T-SQL: Gruppierung von Datumsbereichen und Festlegen des Enddatums basierend auf on/off-Spalte

TransactionDate EffectiveDate TerminationDate Switch 
------------------------------------------------------------------- 
2013-06-14   2013-05-29  NULL    1 
2013-06-14   2013-06-05  2013-06-05   0 
2013-10-03   2013-05-29  2013-05-29   0 
2013-10-12   2013-05-29  NULL    1 
2013-10-12   2013-06-06  2013-06-06   0 

Die endgültige Ausgabe aber eine Zeile sein sollte:

2013-05-29 to 2013-06-06 

Der Ausgang ist eine Zeile, da die in den letzten zwei Transaktionen für 2013.05.29 einschalten waren und der letzte Schalter ausgeschaltet war 2013-06-06, welches das Enddatum für die Zeitspanne wird.

Noch mehr, die Daten sollten auch nach aktiven Spannen gruppiert werden. Wenn es ein weiteres Jahresrekord hier geben würde, müsste es in einer separaten Reihe sein.

Kann ich bitte Hilfe mit einer Abfrage erhalten, um dieses Problem zu lösen?

Antwort

3

Wollen Sie das?

select max(case when switch = 1 then effective_date end) as on_date, 
     (case when max(case when switch = 1 then effective_date end) < 
        max(case when switch = 0 then effective_date end) 
      then max(case when switch = 0 then effective_date end) 
     end) as off_date -- if any 
from t; 

Dies erhält das letzte Datum, an dem der Schalter eingeschaltet ist. Und dann das letzte Datum danach ist es aus.

+0

Syntaxfehler - SQL Server 2012 – rcast

+0

Ja, nur entfernen Sie den letzten rcast

Verwandte Themen