在sql查询中累积数天的数据

时间:2011-08-25 11:33:41

标签: sql db2 ibm-midrange

我有两个表,第一个(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中的初始值加上所有日期之和小于该列中日期的总和。

目标数据库是iSeries上的DB2

2 个答案:

答案 0 :(得分:1)

您必须使用window functions

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。

答案 1 :(得分:1)

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)