Ich habe eine Tabelle (RECORDS) mit Datensätzen von wann bis wann Elemente zu einem übergeordneten Element verknüpft wurden:SQL Server - Merging/Gruppierung zusammenhängende Zeitstempel
CHILD STARTDATE ENDDATE PARENT
207 2013-12-18 12:45:59.017 2014-01-09 18:16:01.227 NULL
207 2014-01-09 18:16:01.227 2016-03-03 09:54:28.757 NULL
207 2016-03-03 09:54:28.757 2100-01-01 00:00:00.000 NULL
10558 2016-03-03 18:10:34.877 2016-04-05 10:25:22.860 10557
10558 2016-04-05 10:25:22.860 2016-04-05 11:33:10.493 10557
10558 2016-04-05 11:33:10.493 2100-01-01 00:00:00.000 10557
10596 2016-05-15 16:55:15.970 2016-05-16 10:00:00.000 10592
10596 2016-05-16 10:00:00.000 2016-05-17 10:00:00.000 10593
10596 2016-05-17 10:00:00.000 2100-01-01 00:00:00.000 10592
10600 2012-12-18 12:45:59.017 2100-01-01 00:00:00.000 10599
ich über den 4 wichtigsten Fälle angezeigt:
Für das gleiche Kind, neue Datensätze mit null-Wert (207)
für das gleiche Kind, neue Datensätze mit demselben Stammwert (10558)
für das gleiche Kind, neue Datensätze mit einem übergeordneten Wechsel (10596)
Aus demselben Kind, nur ein Datensatz (10600).
Als Kind Artikel zurück zu einer älteren Eltern ändern können, mit:
SELECT
CHILD
, MIN(STARTDATE) as STARTDATE
, MAX(ENDDATE) as ENDDATE
, PARENT
FROM RECORDS
GROUP BY CHILD, PARENT
für Artikel im folgenden unerwünschten Ergebnis führen würde, 10596:
207 2013-12-18 12:45:59.017 2100-01-01 00:00:00.000 NULL
10558 2016-03-03 18:10:34.877 2100-01-01 00:00:00.000 10557
10596 2016-05-15 16:55:15.970 2100-01-01 00:00:00.000 10592
10596 2016-05-16 10:00:00.000 2016-05-17 10:00:00.000 10593
10600 2012-12-18 12:45:59.017 2100-01-01 00:00:00.000 10599
Das gewünschte Ergebnis wäre:
207 2013-12-18 12:45:59.017 2100-01-01 00:00:00.000 NULL
10558 2016-03-03 18:10:34.877 2100-01-01 00:00:00.000 10557
10596 2016-05-15 16:55:15.970 2016-05-16 10:00:00.000 10592
10596 2016-05-16 10:00:00.000 2016-05-17 10:00:00.000 10593
10596 2016-05-17 10:00:00.000 2100-01-01 00:00:00.000 10592
10600 2012-12-18 12:45:59.017 2100-01-01 00:00:00.000 10599
Irgendeine Idee, wie man das erreicht?
Die Abfrage, die Sie hier gepostet haben, läuft viel schneller (ich hatte noch nie von diesen LAG- und LEAD-Funktionen gehört!). Ich denke auch, dass Sie die Klauseln STARTDATE und ENDDATE entfernen können, da die Daten bereits in den CHILD- und PARENT-Checks geordert werden (es sei denn, Sie möchten Datensätze zusammenfügen, indem Sie Endzeit- (früherer Datensatz) und und irgendeine Lücke in der Zeit würde einen neuen Rekord anzeigen. –
Wirklich funktioniert diese Frage nicht, wenn es zwei Gruppen mit dem gleichen Elternteil und mehr als einem Satz gibt - gruppiert sie alle zusammen. –
Können Sie spezifischer sein? –