在SQL

时间:2017-11-16 13:44:29

标签: sql postgresql

我有一张桌子:

id value1 value2
1  1      6
2  8      10
3  14     20

然后我有一个号码,让我们说x=7

我的查询应该找出x落在value1和value2之间的id。如果x不属于任何范围,请使用下一个ID。在我的情况下x=7我得到id=2

我的猜测可以使用PostgreSQL中的窗口函数以某种方式完成,但也许有一个更简单的解决方案?

2 个答案:

答案 0 :(得分:2)

select *
from t
where 7 <= v2
order by v1
limit 1

答案 1 :(得分:0)

我假设你真的想要一个可能的结果列表(如果x匹配多行,你想要它们全部;否则只是最后一行)。鉴于此,我想到了以下解决方案:

SELECT    CASE
        WHEN 
            (
            SELECT    COUNT(*)
            FROM      table
            WHERE       x > value1
                    AND x < value2
            ) > 0
        THEN 
            (
            SELECT    id
            FROM      table
            WHERE       x > value1
                    AND x < value2
            )
        ELSE
            (
            SELECT    MAX(id)
            FROM      table
            )
        END AS my_ids