我有以下数据
每当cs3Horizontal for a row=same column but next row时,我需要提取并返回数据行。例如,在图片中,您看到第85/86行的cs3Horizontal=65,因此返回这些行。
我已经研究了许多使用OVER、LEAD和LAG的选项,但老实说,文档没有为以前从未使用过这些窗口函数的人提供足够的细节。我想我正在寻找正确的解决方案,但我该如何实施呢?
我使用PostgreSQL 92.9,用Visual C++编译生成1600, 64位。所讨论的表是时间序列数据,因此,第一列是主键。
最佳答案
LEAD()
和LAG()
是解决方案。如果两行都要:
select t.*
from (select t.*,
lag(cs3Horizontal) over (order by cs3time) as prev_cs3Horizontal,
lead(cs3Horizontal) over (order by cs3time) as next_cs3Horizontal
from t
) t
where prev_cs3Horizontal = cs3Horizontal or
next_cs3Horizontal = cs3Horizontal;