我需要找到一个数据值小于前一行的行。最好的 - 下一行。我更喜欢使用单个SELECT查询而不是存储过程。
数据样本:
1
3
5
8
7
6
10
11
16
15
14
13
所以我最好找到值为6的行。我可以修改表结构以添加任何必需的列。数据是从外部文件批量插入的,我可以完全控制这个过程。
答案 0 :(得分:2)
首先,您需要一些方法来订购行。否则,无法分辨出之前的哪一行。
获得订购列后,您可以使用lag()功能完成任务:
postgres=# create table tbl(id serial, val numeric);
CREATE TABLE
postgres=# insert into tbl(val) values (1),(3),(5),(8),(7),(6),(10),(11),(16),(15),(14),(13);
INSERT 0 12
postgres=# select * from tbl order by id;
id | val
----+-----
1 | 1
2 | 3
3 | 5
4 | 8
5 | 7
6 | 6
7 | 10
8 | 11
9 | 16
10 | 15
11 | 14
12 | 13
(12 rows)
postgres=# select val
postgres-# from (
postgres(# select val, lag(val) over (order by id) prev_val
postgres(# from tbl
postgres(# ) t
postgres-# where val < prev_val;
val
-----
7
6
15
14
13
(5 rows)