有一些新的方法(pg9.X)来表达一个依赖于两个相邻行的函数的查询?可以使用横向查询吗?
示例:
ID VAL DIFF NOTES
11 6 3 9-6=3
12 9 21 30-9=21
13 30 30 no row to subtract如何用优雅的DIFF(i) = VAL(i-1)-VAL(i)来表达SELECT?
PS:假设ORDER BY "ID"
发布于 2016-02-16 20:01:56
这可以使用现代SQL (如窗口函数 )来完成(从Postgres 8.4开始就可用了)
select id,
val,
lead(val) over (order by id) - val as diff
from the_table
order by id;基于order by访问下一行的列值。如果没有下一行,则结果是null,因此减法的结果对于最后一行也是空的。
编辑
如果要使用具有相同窗口定义的多个窗口函数,可以定义一次并重用它:
select id,
val,
lead(c1) over w - val as diff1,
lead(c2) over w - val as diff2
from the_table
window w as (order by id)
order by id;https://stackoverflow.com/questions/35441918
复制相似问题