我有一张桌子如下:
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 但它不执行mulipule操作(它不知道什么是添加、删除、制造.)
我该怎么做?
编辑:使它变得简单..。假设这是起源表。在哪里我定义了谁在谁之前。
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发布于 2015-10-18 11:12:00
您可以使用窗口函数来完成这一任务,前提是您有一个列指定排序。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有一个时间组件,那么这是不必要的。
https://stackoverflow.com/questions/33196944
复制相似问题