Настройка дат начала и окончания sql
Учитывая набор данных в 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
Здесь StoreID - это первичный ключ. Я ищу запрос, который изменит значение времени окончания первой записи на значение, присутствующее в времени начала следующей второй записи. Чтобы быть точным, мне нужно найти записи, которые произошли в тот же день для комбинации PurchaseID и shopkeeperID, где идентификатор местоположения отличается для обоих, а затем захватить время начала более поздней записи и обновить значение в предыдущее время окончания строки.
Примечание: здесь я дал размер выборки всего два, но в моем наборе данных у меня больше двух с вышеуказанными сценариями.
Мой набор результатов должен понравиться:
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
Ответы
Один подход был бы чем-то близким к этому, хотя подвыбор не будет работать так же хорошо, как 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