首页 > 解决方案 > 更新表格产品中的日期

问题描述

我有桌子product

一篇文章可以在同一时期(或几天后)出现在多个列表中

我需要正确更新开始日期 - 识别重复列表并删除重复项

- 恢复最旧的列表(取决于开始日期)

-更新重叠列表的开始日期和结束日期

例如:

Listing    article    site    start date  end date 
L1           A1         001     01/01/2020   25/02/2020
L2           A2         001     15/02/2020   31/03/2020

预期结果

Listing  article    site    start date  end date 
L1         A1         001     01/01/2020   25/02/2020
L2         A2         001     26/02/2020   31/03/2020

请问有什么想法吗?

标签: sqltsqlsql-server-2014

解决方案


如果我们假设结束日期是准确的,您可以使用:

with toupdate as (
      select t.*,
             lag(end_date) over (partition by site order by end_date) as prev_end_date
      from t
     )
update toupdate
    set start_date = dateadd(day, 1, prev_end_date)
    where start_date <> dateadd(day, 1, prev_end_date) and
          prev_end_date is not null;

可能有一些非常复杂的情况,其中最早的结束日期不是最早的开始日期,但您的示例数据并非如此。


推荐阅读