【问题标题】:Current and previous days date diff in days with some condition在某些情况下,当前日期和前几天的日期差异
【发布时间】:2023-01-25 00:59:03
【问题描述】:

我有下表的前三个字段。我想计算金额高于 0 的连续天数(““ 场地)。

key date amount days
1 2023-01-23 0 0
1 2023-01-22 10 2
1 2023-01-21 20 1
1 2023-01-20 0 0
1 2023-01-19 0 0
1 2023-01-18 0 0
1 2023-01-17 3 1
1 2023-01-16 0 0

我尝试过使用this link 的一些 Windows 函数。如果以前的金额为 0,则不添加并重置为 1。

我的代码:

case when f.amount > 0 
     then SUM ( DATE_PART('day',  
                          date::text::timestamp - previou_bus_date::text::timestamp )  
              ) OVER (partition by f.key 
                      ORDER BY f.date  
                      ROWS BETWEEN 1 PRECEDING AND CURRENT ROW )
     else 0 
end as days

【问题讨论】:

  • 我不明白你的问题。你到底想做什么?
  • 谢谢你的回复 !我有 3 列键、日期和金额。我想生成具有上述例外值的第 4 列天数

标签: sql postgresql window-functions gaps-and-islands


【解决方案1】:
with data as (
    select *,
        sum(case when amount = 0 then 1 end)
            over (partition by key order by date) as grp
    from T
)
select key, date, amount,
    sum(counter) over (partition by key, grp order by date) as days
from data;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-22
    • 1970-01-01
    • 2022-11-03
    • 1970-01-01
    • 2020-03-09
    • 1970-01-01
    相关资源
    最近更新 更多