我有一张表格如下:
def, amount , date
add 5 1.1.15
add 5 2.1.15
add 1 3.1.15
remove 5 4.1.15
add 4 4.1.15
make 8 4.1.15
add 5 4.1.15
我需要编写一个执行def(添加/删除)操作的查询并显示它,如果还有其他操作它应该显示最后一行值:
def, amount , date , afterdone
add 5 1.1.15 5
add 5 2.1.15 10 / 5+5
add 1 3.1.15 11 / 10+1
remove 5 4.1.15 6 /11-5
add 4 4.1.15 10 /6+4
make 8 4.1.15 10 / 10 the value row above
add 5 4.1.15 15 /10+5
您可以假设已根据需要对行进行了排序。
我想过用
做窗口功能ROWS between UNBOUNDED PRECEDING and CURRENT ROW
但它没有多重操作(它不知道什么是添加,删除,制作......)
我该怎么做?
编辑:让它变得简单....假设这是原始表。 id定义谁来之前谁。
id def, amount , date
1 add 5 1.1.15
2 add 5 2.1.15
3 add 1 3.1.15
4 remove 5 4.1.15
5 add 4 4.1.15
6 make 8 4.1.15
7 add 5 4.1.15
答案 0 :(得分:6)
您可以使用窗口函数执行此操作,假设您有一个指定订购的列。 SQL表表示无序集。您需要一个用于订购的列。所以:
select t.*,
sum(case when def = 'add' then amount
when def = 'remove' then - amount
else 0
end) over (order by date, id)
from atable t;
这假定id
是date
之后的辅助排序列。但是,如果date
有时间成分,那么这不是必需的。