【发布时间】:2020-09-24 00:33:31
【问题描述】:
Given a data set in 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
1022 20200102 9856 0030 2020-01-09 09:08:53 2020-01-09 09:12:52
1023 20200102 9856 0040 2020-01-10 09:09:48 2020-01-10 09:13:52
这里的 StoreID 是主键。我正在寻找一个查询,它将第一条记录结束时间的值更改为下一条记录的开始时间中的值。准确地说,我需要查找同一天发生的 PurchaseID 和 shopkeeperID 组合的记录,其中位置 id 两者都不同,然后获取后面记录的开始时间并更新前一行结束时间的值。
注意:这里我只给出了两个样本大小,但在我的数据集中我有超过 2 个以上场景。
我希望此更改仅更新为仅在该特定日期发生的记录。逻辑不应该更新所有不在同一天发生的先前记录的结束日期。准确地说,我希望这个逻辑只更新那些在同一天生成的具有不同 LocationID 的实例。
CREATE TABLE [dbo].[TestTab1](
StoreID [int] NOT NULL,
PurchaseID [int] NOT NULL,
ShopID [int] NOT NULL,
LocationID [int] NOT NULL,
starttime [datetime] NOT NULL,
Endtime [datetime] NOT NULL,
) ON [PRIMARY]
INSERT INTO [TestTab1]
VALUES (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'),
(1022,20200102,9856,0030,'2020-01-09 09:08:53','2020-01-09 09:11:52'),
(1023,20200102,9856,0040,'2020-01-10 09:09:48','2020-01-10 09:11:52')
Existing Data:
StoreID PurchaseID ShopID LocationID starttime Endtime
1020 20200102 9856 10 2020-01-08 09:08:53.000 2020-01-08 09:11:52.000
1021 20200102 9856 20 2020-01-08 09:09:48.000 2020-01-08 09:11:52.000
1022 20200102 9856 30 2020-01-09 09:08:53.000 2020-01-09 09:12:52.000
1023 20200102 9856 40 2020-01-10 09:09:48.000 2020-01-10 09:13:52.000
Final Result set:
StoreID PurchaseID ShopID LocationID starttime Endtime
1020 20200102 9856 10 2020-01-08 09:08:53.000 2020-01-08 09:09:48.000
1021 20200102 9856 20 2020-01-08 09:09:48.000 2020-01-08 09:11:52.000
1022 20200102 9856 30 2020-01-09 09:08:53.000 2020-01-09 09:12:52.000
1023 20200102 9856 40 2020-01-10 09:09:48.000 2020-01-10 09:13:52.000
【问题讨论】:
-
这个问题怎么比this更有趣?
-
同样的问题,但想提供更多关于示例表结构和示例数据的信息。
标签: tsql