postgresql - 查找数据值小于上一行的行

时间:2015-10-27 07:32:34

标签: postgresql

我需要找到一个数据值小于前一行的行。最好的 - 下一行。我更喜欢使用单个SELECT查询而不是存储过程。

数据样本:

1
3
5
8
7
6
10
11
16
15
14
13

所以我最好找到值为6的行。我可以修改表结构以添加任何必需的列。数据是从外部文件批量插入的,我可以完全控制这个过程。

1 个答案:

答案 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)