SQL - 选择列值大于它之前的行的行

标签 sql postgresql

我很好奇编写查询的最佳方式。

我有一张 ID 和值表。我想在 ID 较低的所有行中排除 val 小于 val 的行。

我正在尝试在 id-1 上将这个表连接到它自己,但是这并不总是有效。

一些示例数据

CREATE TEMP TABLE new_temp_table (
    id integer, 
    val integer
);

INSERT INTO new_temp_table (id, val)
VALUES (0, 300),
       (1, 150),
       (2, 100), 
       (3, 200),
       (4, 320),
       (5, 120),
       (6, 220),
       (7, 340);

我想要以下输出。

--- id --- val 
--- 0  --- 300
--- 4  --- 320
--- 7  --- 340 

如有任何帮助/指导,我们将不胜感激。

最佳答案

不存在:

select t.* from new_temp_table t
where not exists (
  select 1 from new_temp_table
  where id < t.id and val > t.val
)  

参见 demo .
结果:

| id  | val |
| --- | --- |
| 0   | 300 |
| 4   | 320 |
| 7   | 340 |

关于SQL - 选择列值大于它之前的行的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56654522/

相关文章:

postgresql - SequelizeConnectionAcquireTimeoutError 无处不在

sql - plpgsql 函数生成随机可读字符串

SQL连接表及限制条件匹配结果

java - MySQL 设置变量并在同一语句/脚本中运行查询

sql - 如果值存在于多个类别中,如何分隔分组

sql - 在 postgres 中拆分列值

sql - 针对数百万行的 PostgreSQL 查询在 UUID 上需要很长时间

mysql - 使用 group_concat 加入查询,重复值

mysql - 按照 mysql 中的模式更新多行

Mysql 按多列选择顺序