从连续日期中查找最近的开始日期和结束日期

Posted

技术标签:

【中文标题】从连续日期中查找最近的开始日期和结束日期【英文标题】:Finding most recent startdate, and endDate from consecutive dates 【发布时间】:2021-11-06 16:00:33 【问题描述】:

我有一张如下表:

user_id store_id stock date
116 2 0 2021-10-18
116 2 0 2021-10-19
116 2 0 2021-10-20
116 2 0 2021-08-16
116 2 0 2021-08-15
116 2 0 2021-07-04
116 2 0 ,2021-07-03
389 2 0 2021-07-02
389 2 0 2021-07-01
389 2 0 2021-10-27
52 6 0 2021-10-28
52 6 0 2021-10-29
52 6 0 2021-10-30
116 38 0 2021-05-02
116 38 0 2021-05-03
116 38 0 2021-05-04
116 38 0 2021-04-06

该表可以连续多天出现产品缺货的情况,因此我想使用产品缺货的最后一个 startDate 和 endDate 创建一个查询。对于上表,结果必须是:

user_Id store_id startDate endDate
116 2 2021-10-18 2021-10-20
116 38 2021-05-02 2021-05-04
389 2 2021-07-01 2021-07-02
52 6 2021-10-28 2021-10-30

我已经尝试了使用 row_number() 的解决方案,但没有成功。有人有使用 SQL (PostgreSQL) 解决此问题的提示或想法吗?

【问题讨论】:

在您的表格中显示store_id,并在结果中显示warehouse_id。它们看起来是一样的,是吗? 请提供minimal reproducible example,并确保包含您尝试过的查询以及该查询产生的结果。 @AdrianKlaver thx,我已经编辑了表格 【参考方案1】:

你可以这样做:

select user_id, store_id,min(date) startdate,max(date) enddate
from (
   select *, rank() over (partition by user_id, store_id order by grp desc) rn from (
       select *, date - row_number() over (partition by user_id,store_id order by date) * interval '1 day' grp
       from tablename 
) t) t where rn = 1
group by user_id, store_id,grp

db小提琴here

【讨论】:

有效!谢谢 @OArmas 不客气,如果这个答案有帮助,请接受/点赞

以上是关于从连续日期中查找最近的开始日期和结束日期的主要内容,如果未能解决你的问题,请参考以下文章

查找每个员工的项目开始日期和结束日期(即开始日期和结束日期应该是连续的,在天/月/年中没有任何中断)

如何在 Presto 中获取连续日期,其中一列中的开始日期和另一列中的结束日期

根据日期范围查找至少 2 个连续项目

SQL Server连续日期 - 将多行汇总为连续的开始和结束日期行,而不包含CTE,循环,... s

用于删除重复(连续)记录的 SQL,但将最小日期存储在开始日期和最大日期作为结束日期

在给定日期时间连续性的情况下,Pandas 输出日期、开始和结束时间以及事件状态