Geetings, Stackers.Подведение итогов (навсегда) данных в таблице SQL
У меня огромное количество точек данных в таблице SQL, и я хочу обобщить их так, чтобы они напоминали RRD.
Предполагая таблицу, такие как
ID | ENTITY_ID | SCORE_DATE | SCORE | SOME_OTHER_DATA
----+-----------+------------+-------+-----------------
1 | A00000001 | 01/01/2010 | 100 | some data
2 | A00000002 | 01/01/2010 | 105 | more data
3 | A00000003 | 01/01/2010 | 104 | various text
... | ......... | .......... | ..... | ...
... | A00009999 | 01/01/2010 | 101 |
... | A00000001 | 02/01/2010 | 104 |
... | A00000002 | 02/01/2010 | 119 |
... | A00000003 | 02/01/2010 | 119 |
... | ......... | .......... | ..... |
... | A00009999 | 02/01/2010 | 101 | arbitrary data
... | ......... | .......... | ..... | ...
... | A00000001 | 01/02/2010 | 104 |
... | A00000002 | 01/02/2010 | 119 |
... | A00000003 | 01/01/2010 | 119 |
Я хочу, чтобы в конечном итоге с одной записью в сущности, за месяц:
ID | ENTITY_ID | SCORE_DATE | SCORE |
----+-----------+------------+-------+
... | A00000001 | 01/01/2010 | 100 |
... | A00000002 | 01/01/2010 | 105 |
... | A00000003 | 01/01/2010 | 104 |
... | A00000001 | 01/02/2010 | 100 |
... | A00000002 | 01/02/2010 | 105 |
... | A00000003 | 01/02/2010 | 104 |
(я не забочусь о SOME_OTHER_DATA - Я буду выберите что-нибудь - возможно, первую или последнюю запись.)
Что такое простой способ сделать это на регулярной основе, чтобы все в последнем календарном месяце было суммировано таким образом?
На данный момент мой план вид:
- Для каждого EntityId
- Для каждого месяца
- Найти средний балл для всех записей в данном месяце
- Update первый рекорд с результатами предыдущего шага
- Удалить все записи, которые не являются первыми
- Для каждого месяца
Я не могу думать о аккуратный способ сделать это, хотя, что не включает в себя множество обновлений и итерации.
Это может быть сделано в хранимой процедуре SQL или может быть включено в .Net-приложение, которое генерирует эти данные, поэтому решение действительно не должно быть «одним большим SQL-скриптом», но может быть :)
(SQL-2005)
@ Цилиндрический, я перечитал вопрос и полностью изменил свой ответ. –