1

考虑以下表结构:

id   speed 
 1   100
 2   200
 3   300
 4   400
 5   500

考虑以下查询:"SELECT * FROM records WHERE speed >= 300"- 这将返回行#3、4、5。有没有办法修改此查询,以便使用相同的300速度参数它也将返回不符合条件的第一行,即#2。所以最终结果将是第 2、3、4、5 行?

UPD:请注意,此处的所有值和记录计数都是任意的,仅作为示例。数据库是 SQLite。

4

3 回答 3

3

尝试这个:

SELECT *
FROM Test
WHERE Speed >= 300

UNION

SELECT * 
FROM (
    SELECT *
    FROM Test
    WHERE Speed < 300
    ORDER BY Speed DESC
    LIMIT 1
) AS XXX

ORDER BY Speed

演示

注意:更改为SQLite 语法

于 2014-08-21T14:43:18.297 回答
2

试试这个简单的查询,它选择最大 id 和速度 < 300 的行以及速度 >= 300 的行。

SELECT * 
FROM records 
WHERE speed >= 300
OR id = (SELECT MAX(id) FROM records WHERE speed < 300)
ORDER BY id;
于 2014-08-21T14:55:23.790 回答
1
select * 
from records
order by abs(300 - speed) asc
limit 5
于 2014-08-21T14:28:42.833 回答