Wir haben eine Tabelle mit Service-Bestimmungen für Menschen. Zum Beispiel:So finden Sie zusammenhängende Daten in zahlreichen Zeilen in SQL Server
id people_id dateStart dateEnd
1 1 28.07.14 19.07.16
2 2 14.04.15 16.02.16
3 2 16.02.16 18.04.16
4 2 18.04.16 27.06.16
5 2 27.06.16 19.07.16
6 2 19.07.16 NULL
7 3 24.02.12 17.06.12
8 3 23.07.12 19.09.12
9 3 18.08.14 NULL
10 4 28.06.15 NULL
11 5 19.01.16 NULL
brauche ich verschiedene person_id des (Clients) mit realem Startdatum des unfertigen ununterbrochenen Service zu extrahieren, die mehr als ein Jahr dauert und dann Tage zählen passieren. "Startdatum" und "Enddatum" von zwei verschiedenen Zeilen sollten gleich sein, um als zusammenhängend zu zählen. Ein Client kann nur einen nicht abgeschlossenen Dienst haben.
So das perfekte Ergebnis für die Tabelle oben wäre:
SELECT
--some other columns from PEOPLE,
p.PEOPLE_ID,
s.DATESTART,
DATEDIFF(DAY, s.DATESTART, GETDATE()) as lasts
FROM
PEOPLE p
INNER JOIN service s on s.ID =
(
SELECT TOP 1 s2.ID
FROM service s2
WHERE s2.PEOPLE_ID = p.PEOPLE_ID
AND s2.DATESTART IS NOT NULL
AND s2.DATEEND IS NULL
ORDER BY s2.DATESTART DESC
)
WHERE
DATEDIFF(DAY, s.DATESTART , GETDATE()) >= 365
Aber ich kann nicht herausfinden, wie zusammenhängende Dienstleistungen bestimmen:
people_id dateStart lasts(days)
2 14.04.15 472
3 18.08.14 711
4 28.06.15 397
ich nicht Problem mit einem einzigen Dienst habe .
Wenn 'dateEnd 'ist' null', bedeutet das, dass es weitergeht? – Ash
@AshwinNair Ja ist es. Ich brauche nur aktive Clients. Wenn jemand keinen Dienst mit "dateEnd = NULL" hat, ist er ** nicht ** aktiv. –
Welche Version von 'SQL Server' verwenden Sie? – Squirrel