【发布时间】: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值”的总和吗?
标签: postgresql window-functions