Tsql 调整sql的开始和结束日期

Tsql 调整sql的开始和结束日期,tsql,Tsql,给定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

给定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对于两者都不同,然后获取后面记录的开始时间,并更新前一行endtime中的值

注意:这里我只给出了两个样本大小,但在我的数据集中,我有两个以上的场景

我的结果集应该是:

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

一种方法与此类似,尽管子选择的执行效果不如设置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

一种方法与此类似,尽管子选择的执行效果不如设置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

此逻辑返回值。此语句不返回值。它使用一个子选择来获取值。您试过了吗?此逻辑返回值。此语句不返回值。它使用一个子选择来获取值。你试过了吗?OP承认他们在中复制了问题。OP承认他们在中复制了问题。