Накопление данных за несколько дней в SQL-запросе - PullRequest
2 голосов
/ 25 августа 2011

У меня есть две таблицы, первая (T1) - базовое число, первая - базовое значение на символ:

symbol       value
------------ -----
ABC           1000
DEF           2000

Вторая таблица (T2) представляет собой последовательность значений на дату, т. Е .:

.
date         symbol value
----------   ------ -----
2011-09-01   ABC      100
2011-09-02   ABC       10
2011-09-03   ABC        1

Какой запрос мне потребуется, чтобы получить суммарную сумму столбца значения, добавленного к начальному значению в первом столбце за несколько дней. Таким образом, результат запроса будет выглядеть примерно так:

symbol date       total
------ ---------- ------
ABC    2011-09-01   1100
ABC    2011-09-02   1110
ABC    2011-09-03   1111

Таким образом, сумма начального значения в T1 плюс сумма всех дат меньше даты в этом столбце.

Целевой базой данных для этого является DB2 на iSeries

Ответы [ 2 ]

1 голос
/ 25 августа 2011

Подход SQL

select 
   a.symbol, 
   a.value  --current value
     + COALESCE((select sum(value) 
        from T2 b 
        where 
           b.date < a.date and
           b.symbol=a.symbol
        ),0) --sum of history
     + c.value --initial value
from 
   t2 a join t1 c on (a.symbol = c.symbol)
1 голос
/ 25 августа 2011

Вы должны использовать оконные функции :

SELECT T1.symbol, T2.date, COALESCE(T1.value, 0)+sum(T2.value) over (PARTITION BY T2.symbol ORDER BY T2.date)
FROM T2
    LEFT JOIN T1 ON T1.symbol = T2.symbol
ORDER BY T1.symbol, T2.date

РЕДАКТИРОВАТЬ

Работает на PostgreSQL, в соответствии с документацией DB2 9.7 LUW, она должнаработать также на DB2.

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