Anpassen von Start- und Enddaten SQL
Gegeben ein Datensatz in MS SQL Server 2016
StoreID PurchaseID ShopID LocationID Starttime Endtime
1020 20200102 9856 0010 2020-01-08 09:08:53 2020-01-08 09:11:52
1021 20200102 9856 0020 2020-01-08 09:09:48 2020-01-08 09:11:52
Hier ist die StoreID der Primärschlüssel. Ich suche nach einer Abfrage, die den Wert der Endzeit des ersten Datensatzes in den Wert ändert, der in der Startzeit des nächsten zweiten Datensatzes vorhanden ist. Um genau zu sein, muss ich nach Datensätzen suchen, die am selben Tag für die Kombination aus PurchaseID und ShopkeeperID aufgetreten sind, wobei die Standort-ID für beide unterschiedlich ist, und dann die Startzeit des späteren Datensatzes abrufen und den Wert in der vorherigen Zeilenendzeit aktualisieren.
Hinweis: Hier habe ich eine Stichprobengröße von nur zwei angegeben, aber in meinem Datensatz habe ich mehr als zwei mit den oben genannten Szenarien.
Meine Ergebnismenge sollte wie folgt aussehen:
StoreID PurchaseID ShopkID LocationID Starttime Endtime
1020 20200102 9856 0010 2020-01-08 09:08:53 2020-01-08 09:09:48
1021 20200102 9856 0020 2020-01-08 09:09:48 2020-01-08 09:11:52
Antworten
Ein Ansatz wäre etwas in der Nähe davon, obwohl eine Unterauswahl nicht so gut funktioniert wie SET SQL:
UPDATE
T
SET
T.purchaseendtime =
(
SELECT TOP 1
purchasestarttime
FROM
TABLE_NAME T2
WHERE
T2.PurchaseStartTime > T.PurchaseStartTime
AND T2.PurchaseID = T.PurchaseID
AND T2.ShopkeeperID = T.ShopkeeperID
AND T2.LocationID <> T.LocationID
AND Convert(date, T2.PurchaseStartTime) = Convert(date, T.PurchaseStartTime)
ORDER BY
T2.PurchaseStarttime
)
FROM
TABLE_NAME T