Настройка дат начала и окончания sql

Sep 23 2020

Учитывая набор данных в 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

Ответы

DanielG Sep 23 2020 at 21:03

Один подход был бы чем-то близким к этому, хотя подвыбор не будет работать так же хорошо, как 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