Генерация текущей суммы рейтингов в SQL - PullRequest
2 голосов
/ 25 мая 2010

У меня есть таблица рейтинга. Это сводится к:

rating_value  created
+2            april 3rd
-5            april 20th

Итак, каждый раз, когда кто-то получает оценку, я отслеживаю это рейтинговое событие в базе данных.

Я хочу создать график истории / времени рейтинга, где рейтинг - это сумма всех рейтингов на данный момент времени на графике.

т.е. Рейтинг человека на 5 апреля может быть select sum(rating_value) from ratings where created <= april 5th

Единственная проблема, связанная с этим подходом, заключается в том, что мне приходится выполнять этот день за днем ​​через интересующий меня интервал. Есть ли какой-то прием для создания промежуточного итога с использованием данных такого типа?

В противном случае, я думаю, что лучший подход - это создать денормализованную таблицу «истории рейтингов» наряду с отдельными рейтингами.

Ответы [ 2 ]

8 голосов
/ 25 мая 2010

Если у вас есть postgresql 8.4, вы можете использовать функцию агрегирования окон для вычисления промежуточной суммы:

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 голос
/ 25 мая 2010

попробуйте добавить группу по заявлению. это дает вам значение рейтинга для каждого дня (например, в массиве). когда вы выводите значение рейтинга с течением времени, вы можете просто добавить предыдущие элементы массива вместе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...