如何计算 Postgresql 中特定日期最后 7 行的累积总和?

Posted

技术标签:

【中文标题】如何计算 Postgresql 中特定日期最后 7 行的累积总和?【英文标题】:How do I calculate cumulative sum for last 7 rows on a specific date in Postgresql? 【发布时间】:2020-08-07 19:04:15 【问题描述】:

我有一个包含以下列的表: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 个运行总和?

【问题讨论】:

不清楚你想要什么。您能否提供一些示例数据和您期望看到的示例?尚不清楚 user_id 是否可以在每个 day 中包含多行。另外,您确定要让摘要显示“最后 7 行”而不是“最后 7 个 day 值”的总和吗? 【参考方案1】:

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

【讨论】:

以上是关于如何计算 Postgresql 中特定日期最后 7 行的累积总和?的主要内容,如果未能解决你的问题,请参考以下文章

如何在PostgreSQL中的字符串中查找特定字符的第一次和最后一次出现

如何计算日历表中只有值为 1 的 2 列日期之间的天数 - postgreSQL?

PostgreSQL:如何在给定日期范围内的每一天为每个帐户选择最后余额? [复制]

如何编写选择最后一个特定日期并从那里返回 1 周的查询?

如何从当前日期 PHP 获取最近 7 周、7 个月的日期范围?

excel中如何计算出 两个日期之间相差是多少年、月、日? 日期的格式是:2011-9-7。