如何计算 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:如何在给定日期范围内的每一天为每个帐户选择最后余额? [复制]