首页 > 解决方案 > 如何计算 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 个运行总和?

标签: postgresqlwindow-functions

解决方案


根据问题:每个用户在特定日期的最后 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;

推荐阅读