【问题标题】: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,我已经编辑了表格

标签: sql postgresql


【解决方案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 不客气,如果这个答案有帮助,请接受/点赞
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-19
相关资源
最近更新 更多