【问题标题】:Update dates in table product更新表格产品中的日期
【发布时间】:2020-06-29 15:09:56
【问题描述】:

我有桌子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

有什么想法吗?

【问题讨论】:

标签: sql tsql sql-server-2014


【解决方案1】:

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

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;

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

【讨论】:

  • @csharp 。 . .是的。在 SQL Server 中,您甚至可以更新 CTE(如本例所示)。可更新的 CTE、可更新的视图和子查询几乎都是一回事。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-22
  • 2017-12-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多