So erstellen Sie einen datesbereich aus einer list von data

Ich habe versucht, eine Antwort auf meine Frage zu suchen, aber alle Szenarien, die vorher abgedeckt wurden, sind etwas anders. Entschuldigungen Wenn ich einen verpasst habe, der das beantwortet.

Ich habe einen Tisch, der so aussieht:

ID Date 35 2015-06-01 35 2015-06-02 35 2015-06-03 35 2015-06-06 40 2015-06-07 40 2015-06-08 40 2015-06-09 40 2015-06-10 40 2015-06-13 35 2015-06-14 35 2015-06-15 35 2015-06-16 35 2015-06-17 

Und ich möchte es in der Form bekommen:

 ID DateFrom DateTo 35 2015-06-01 2015-06-07 40 2015-06-07 2015-06-14 35 2015-06-14 2015-06-18 

Jedoch gibt jede Lösung, die ich an denken oder sehen kann (row_number (), min / max, lag etc) nur die folgenden zurückgibt

 ID DateFrom DateTo 35 2015-06-01 2015-06-18 40 2015-06-07 2015-06-14 

dh der datesbereich für ID 35 nimmt die min und max der data aus der ersten Tabelle. Es scheint so, dass es einfach sein sollte, aber ich bin ganz fest.

Vielen Dank,

Tom

Sie können dies mit ROW_NUMBER mit MIN und MAX :

SQL-Geige

 WITH CteGrp AS( SELECT *, grp = ROW_NUMBER() OVER(ORDER BY Date) - ROW_NUMBER() OVER(PARTITION BY ID ORDER BY Date) FROM tbl ) SELECT ID, DateFrom = MIN([Date]), DateTo = MAX([Date]) FROM CteGrp GROUP BY ID, grp ORDER BY DateFrom 

ERGEBNIS

 | ID | DateFrom | DateTo | |----|------------|------------| | 35 | 2015-06-01 | 2015-06-06 | | 40 | 2015-06-07 | 2015-06-13 | | 35 | 2015-06-14 | 2015-06-17 |