我有以下数据:
country objectid objectuse
record_date
2022-07-20 chile 0 4
2022-07-01 chile 1 4
2022-07-02 chile 1 4
2022-07-03 chile 1 4
2022-07-04 chile 1 4
... ... ... ...
2022-07-26 peru 3088 4
2022-07-27 peru 3088 4
2022-07-28 peru 3088 4
2022-07-30 peru 3088 4
2022-07-31 peru 3088 4
这些数据描述了一个国家内一个对象在一个月(2022年7月)的日常使用情况,并不是所有的对象都每天都在使用.我感兴趣的一件事是该月每月最大值的总和:
WITH month_max AS (
SELECT
country,
objectid,
MAX(objectuse) AS maxuse
FROM mytable
GROUP BY
country,
objectid
)
SELECT
country,
SUM(maxuse)
FROM month_max
GROUP BY country;
这导致了以下结果:
country sum
-------------
chile 1224
peru 17008
但我真正想要的是得到从月初到每个日期的最大值的滚动总和.这样我得到的东西看起来就像:
country sum
record_date
2022-07-01 chile 1
2022-07-01 peru 1
2022-07-02 chile 2
2022-07-02 peru 3
... ... ...
2022-07-31 chile 1224
2022-07-31 peru 17008
我try 使用这样的窗口函数,但没有用:
SELECT
*,
SUM(objectuse) OVER (
PARTITION BY country
ORDER BY record_date ROWS 30 PRECEDING
) as cumesum
FROM mytable
order BY cumesum DESC;
有没有一种方法可以在SQL中达到预期效果?
先谢谢你.
编辑:对于它的价值,我问了same question but on Pandas,我得到了答案;也许它有助于弄清楚如何在SQL中做到这一点.