首页 > 解决方案 > SQL查询如果价格高于并且ID低于之前的ID和价格记录则返回记录

问题描述

当我有类似于以下的数据集时,我在编写 SQL 查询以返回记录时遇到问题:

ID 价格
32967 39
14675 40
26434 41
18495 42
19698 43
19090 44
9278 45
14932 46

当价格大于之前的价格并且id低于之前的低价记录时,我想返回id和价格。所以我想用上面的数据返回:

ID 价格
32967 39
14675 40
9278 45

我真的很感激帮助。我已经到了我的大脑已经关闭的地步,我确定我错过了一些明显的东西。知道什么时候寻求帮助,对吧?

标签: sqldatabasepostgresql

解决方案


如果我理解正确,累积min()可以满足您的要求:

select t.*
from (select t.*,
             min(id) over (order by price rows between unbounded preceding and 1 preceding) as prev_min_id
      from t
     ) t
where prev_min_id is null or id < prev_min_id;

是一个 db<>fiddle。


推荐阅读