2017-04-04 54 views
0
id  value 
1   10 
2   20 
3   30 
4   40 
5   50 

需要的輸出如何在接下來的科拉姆

表名數據添加列值。

id  value 
1   10 //(10+0(previous value)) 
2   30 //(20+10(previous value)) 
3   50 //(30+20(previous value)) 
4   70 //(40+30(previous value)) 
5   90 //(50+40(previous value)) 

請提供SQL查詢

+0

您正在使用的RDBMS? MySQL或SQL Server? –

+3

我刪除了不兼容的數據庫標籤。請僅使用您真正使用的數據庫進行標記。 –

+0

數據庫名稱 - ibm DB2 – raj

回答

1

您正在尋找LAG這是標準的SQL,應該在以後的DB2版本,如果我沒有記錯。

select 
    id, 
    value + coalesce(lag(value) over (order by id), 0) as value 
from mytable 
order by id; 

如果LAG OVER不可用,SUM OVER可能是:

select 
    id, 
    coalesce(sum(value) over (order by id rows between 1 preceding and current row), 0) 
    as value 
from mytable 
order by id; 
+0

當執行查詢時比該錯誤來了 選擇 ID, 聚結(1在前和當前行)之間由ID的行總和(值)以上(順序,0) 由ID 值 從users.mohit 順序 「VALUE」 不是在上下文中有效在哪裏使用.. SQLCODE = -206,SQLSTATE = 42703,DRIVER = 4.18.60 – raj

+0

對不起,我不明白它是如何得到這個消息的。 'value'只在兩個地方使用:'sum(value)'看起來正確,'as value'似乎也是正確的。我不太瞭解DB2。它是否有問題,因爲我們對別名使用與列相同的名稱?我不知道。 –

0

解決方案1:

select f1.id, 
ifnull((select f2.value from yourtable f2 where f1.id - 1 =f2.id), 0) + f1.value as value 
from yourtable f1 
0

解決方案2:

select f1.id, 
ifnull(f3.value, 0) + f1.value as value 
from yourtable f1 
left outer join lateral 
(
    select f2.value from yourtable f2 
    where f1.id - 1 =f2.id 
) f3 on 1=1