postgresql 如何按ID分组,但有附加条件

btxsgosb  于 2023-08-04  发布在  PostgreSQL
关注(0)|答案(1)|浏览(115)

假设我有一个包含3列的表:产品ID、日期_时间(每日)、销售数量。我不知道如何将Quantity = 0的连续天数分组。
数据来源:

ID - Date - Quantity Sold
1  - 1/1 - 7
1  - 1/2 - 1
1  - 1/3 - 0
1  - 1/4 - 0
1  - 1/5 - 0
1  - 1/6 - 2
1  - 1/7 - 8
2  - 1/1 - 0
2  - 1/2 - 0
2  - 1/3 - 1
2  - 1/4 - 10
2  - 1/5 - 2
2  - 1/6 - 0
2  - 1/7 - 0

字符串
预期结果应类似于:

ID - StartDate - EndDate - Quan
1 - 1/3 - 1/5 - 0
2 - 1/1 - 1/2 - 0
2 - 1/6 - 1/7 - 0


谢谢你,谢谢
我可以用最小最大值和datediff做一个Id 1的例子,但是像id 2这样的问题...我想不出来。

gmxoilav

gmxoilav1#

您可以:

select id, g, min(dt) as s, max(dt) as e
from (
  select t.*,
    sum(case when qty = 0 then 0 else 1 end) 
      over(partition by id order by dt) as g
  from t
) x
where qty = 0 
group by id, g

字符串
测试结果:

id  g  s           e          
 --- -- ----------- ---------- 
 1   2  2023-01-03  2023-01-05 
 2   0  2023-01-01  2023-01-02 
 2   3  2023-01-06  2023-01-07


参见db<>fiddle上的运行示例。

相关问题