postgresql - 如何计算 Postgresql 中特定日期最后 7 行的累积总和?
问题描述
我有一个包含这些列的表:user_id、day、valueA、valueB。我想为每个在特定日期拥有数据的用户计算最后 7 行 valueA 和 valueB 的运行总和,例如“2020-08-01”。
(注意:当用户的 valueA 和 valueB 不为零时,用户只有一行,所以有些日期不在表中。)
我试过这个查询:
select user_id, day,
sum(valueA) over(partition by user_id rows between 7 preceding and current row) as last_7_A,
sum(valueB) over(partition by user_id rows between 7 preceding and current row) as last_7_B
from table where day='2020-08-01'
但是此查询不计算运行总和并返回我在日期 2020-08-01 的 valueA 和 valueB
我可以每天计算并选择我想要的日期,但这确实效率低下。任何想法如何添加日期约束并让它只计算每个用户的一行的最后 7 个运行总和?
解决方案
根据问题:每个用户在特定日期的最后 7 行总和,这可能有效
select user_id, sum(valueA) "sum of valueA", sum(valueB) "sum of valueB"
from sample_table
where id in (
select id
from sample_table
where day='2020-08-08'
order by id desc limit 7)
group by user_id;
推荐阅读
- python - 从发出的信号更新 progressBar 值
- javascript - 如何滚动到动态添加的最后一个 div?
- python-3.x - 如何使用浮点索引和列名访问数据框
- build - Cmake生成的makefile不会生成二进制文件,即使它说它会生成
- python - 如何在 python pyqt5 中修复“TypeError:'str' object is not callable”
- webpack - Webpack4 + babel8 + coreJs@3 下的 CommonJs 出现奇怪错误
- java - 如果匹配,则将 ArrayList_A 的元素添加到 ArrayList ,如果不匹配,则将 ArrayList_B 的元素添加到 ArrayList
- java - Apache Camel:使用 SFTP 组件一次下载多个文件
- javascript - 在cakephp中使用javascript隐藏下拉字段
- c++ - 在类中初始化 NTL 向量时出错