在SQL中生成评级的运行总和

Koo*_*obz 2 postgresql sum

我有一张评级表.归结为:

rating_value  created
+2            april 3rd
-5            april 20th
Run Code Online (Sandbox Code Playgroud)

因此,每次有人获得评级时,我都会在数据库中跟踪该评级事件.

我想生成一个评级历史/时间图,其中评级是图表上该时间点之前所有评级的总和.

IE 4月5日的评级可能是 select sum(rating_value) from ratings where created <= april 5th

这种方法的唯一问题是我必须在我感兴趣的时间间隔内逐日运行.使用这种数据生成运行总计是否有一些技巧?

否则,我认为最好的方法是在个别评级旁边创建一个非规范化的"评级历史"表.

ara*_*nid 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)
Run Code Online (Sandbox Code Playgroud)

http://www.postgresql.org/docs/current/static/sql-expressions.html#SYNTAX-WINDOW-FUNCTIONS