从连续日期中查找最近的开始日期和结束日期
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 中获取连续日期,其中一列中的开始日期和另一列中的结束日期
SQL Server连续日期 - 将多行汇总为连续的开始和结束日期行,而不包含CTE,循环,... s