给定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组合在同一天发生的记录,其中两者的位置id不同,然后获取后面记录的开始时间,并更新前一行结束时间中的值。
注意:在这里,我只给出了两个样本大小,但在我的数据集中,上述场景的样本大小超过了两个。
我的结果集应该如下所示:
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
发布于 2020-09-24 05:03:59
一种方法与此类似,尽管子select的性能不如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
https://stackoverflow.com/questions/64036093
复制相似问题