如何解决按时间条件分组的 SQL 累积总和
我有一个表格,其中包含 dummy_id、date_registered、item_id、数量、价格,像这样:
dummy_id | date_registered | item_id | 数量 | 价格 | my_cumulative |
---|---|---|---|---|---|
1 | 2013-07-01 | 100 | 10 | 34.5 | 10 |
2 | 2013-07-01 | 145 | 8 | 2.3 | 8 |
3 | 2013-07-11 | 100 | 20 | 34.5 | 30 |
4 | 2013-07-23 | 100 | 15 | 34.5 | 45 |
5 | 2013-07-24 | 145 | 10 | 34.5 | 18 |
如果我想计算列 my_cumulative ,其中包含 date_registered 每个 item_id 订单的累计总数,我使用以下代码:
select dummy_id,date_registered,item_id,quantity,price,sum(quantity) over (partition by item_id order by date_registered) as cumulative
from table t;
而且效果很好。但是,如果我现在想为每一行 my_cumulative 列只计算上个月的订单怎么办? (仅对date_register列小于当前列的行计算数量总和,不超过一个月)
有没有办法在 sql 中做到这一点? (首选 postgresql)
解决方法
如果您想要当月的累计数量——我怀疑这正是您想要的,那么请更改 partition by
:
select dummy_id,date_registered,item_id,quantity,price,sum(quantity) over (partition by item_id,date_trunc('month',date_registered) order by date_registered) as cumulative
from table t;
如果你真的想要最后一个月,那么使用带间隔的范围窗口框架:
select dummy_id,sum(quantity) over (partition by item_id
order by date_registered
range between interval '1 month' preceding and current row
) as cumulative
from table t;
第一个对我来说似乎更有用。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。