我有两个表,第一个(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
答案 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)