Ajustando datas de início e término sql
Dado um conjunto de dados no 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
Aqui, o StoreID é a chave primária. Estou procurando uma consulta que alterará o valor da hora de término do primeiro registro para o valor presente na hora de início do próximo segundo registro. Para ser preciso, preciso procurar os registros que aconteceram no mesmo dia para a combinação PurchaseID e shopkeeperID em que a identificação do local é diferente para ambos e, em seguida, pegar a hora de início do registro posterior e atualizar o valor na hora de término da linha anterior.
Nota: Aqui, dei o tamanho da amostra de apenas dois, mas no meu conjunto de dados tenho mais de 2 com os cenários acima.
Meu conjunto de resultados deve ser:
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
Respostas
Uma abordagem seria algo próximo a isso, embora uma sub-seleção não funcione tão bem quanto 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