【发布时间】:2021-06-13 17:24:41
【问题描述】:
我有一张表格,其中包含 dummy_id、date_registered、item_id、quantity、price,像这样:
| dummy_id | date_registered | item_id | quantity | price | 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)
【问题讨论】:
-
请定义“上个月”的含义。不清楚。
-
对于 item_id=100 和 date_registered=2013-07-23 的行,my_cumulative 列包含自 2013-06-23 以来的订单总数,而不是从表的开头开始跨度>
标签: sql postgresql window-functions cumulative-sum