我有一张评级表。归结为:
rating_value created
+2 april 3rd
-5 april 20th
因此,每当有人获得评分时,我都会在数据库中跟踪该评级事件。
我想生成一个评分历史记录/时间图表,其中评分是图表上该时间点之前所有评级的总和。
即。一个人4月5日的评分可能是select sum(rating_value) from ratings where created <= april 5th
这种方法的唯一问题是我必须在我感兴趣的时间间隔内逐日运行。使用这种数据生成运行总计是否有一些技巧?
否则,我认为最好的方法是在个别评级的同时创建一个非规范化的“评级历史”表。
答案 0 :(得分:8)
如果你有postgresql 8.4,你可以使用window-aggregate函数来计算一个运行总和:
steve@steve@[local] =# select rating_value, created,
sum(rating_value) over(order by created)
from rating;
rating_value | created | sum
--------------+------------+-----
2 | 2010-04-03 | 2
-5 | 2010-04-20 | -3
(2 rows)
请参阅http://www.postgresql.org/docs/current/static/sql-expressions.html#SYNTAX-WINDOW-FUNCTIONS
答案 1 :(得分:1)
尝试添加group by语句。它为您提供每天的评级值(例如数组)。当您随时间输出评级值时,您可以将之前的数组元素一起添加。