Ajustement des dates de début et de fin SQL
Étant donné un ensemble de données dans 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
Ici, le StoreID est la clé primaire. Je recherche une requête qui changera la valeur de l'heure de fin du premier enregistrement à la valeur présente dans l'heure de début du deuxième enregistrement suivant. Pour être précis, je dois rechercher les enregistrements qui se sont produits le même jour pour la combinaison PurchaseID et shopkeeperID où l'ID d'emplacement est différent pour les deux, puis saisir l'heure de début de l'enregistrement ultérieur et mettre à jour la valeur dans l'heure de fin de la ligne précédente.
Remarque: Ici, j'ai donné une taille d'échantillon de seulement deux, mais dans mon ensemble de données, j'en ai plus de 2 avec les scénarios ci-dessus.
Mon jeu de résultats devrait ressembler à:
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
Réponses
Une approche serait quelque chose de proche de cela, bien qu'une sous-sélection ne fonctionnera pas aussi bien que 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