sql - 更新表格产品中的日期
问题描述
我有桌子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
请问有什么想法吗?
解决方案
如果我们假设结束日期是准确的,您可以使用:
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;
可能有一些非常复杂的情况,其中最早的结束日期不是最早的开始日期,但您的示例数据并非如此。
推荐阅读
- regex - 提取斜线之间的字符串,但第二个斜线可能不存在
- r - 考虑了嵌套 ifelse 中的一些条件
- c# - 如何在不缩放纹理的情况下实现缩放行为?
- function - 如何在arduino代码中定义一个函数来连接wifi模块和arduino uno
- python - 从 pythonanywhere.com 中的 .env 文件读取环境变量
- mysql - 如何在 SQL 的嵌套子查询中查找不同的列?
- python - 如何解析 .trs XML 文件以获取自闭合标签之间的文本?
- jquery - Ag-Grid:应用过滤器后如何保存和重新加载列
- nginx - 错误子域不会在 NGINX 中重定向
- python - 每月显示的唯一 ID 的滚动 12 个月计数