我想编写一个 sql 查询,它返回所有大于或等于 x 的值以及不大于 x 的第一个值。
例如,如果我们有一个包含值 1、2、3、4、5 且 x 为 3 的表,我需要返回 2、3、4、5。
我的示例包含均匀间隔的整数这一事实无济于事,因为我的实际数据不那么合作。
这甚至可能吗,还是我最好只获取整个表并手动确定我需要哪些行?
SELECT <columns> -- you want in the result
FROM tableX
WHERE columnX >=
( SELECT MAX(columnX)
FROM tableX
WHERE columnX < @x -- @x is the parameter, 3 in your example
) ;
工会是你最好的选择。将所有大于 x 的值和小于 x 的最大值的集合粘贴在一起。像下面这样的东西应该可以工作:
SELECT n FROM table WHERE n > $x ORDER BY n DESC
UNION SELECT n from table WHERE n < $x ORDER By n DESC LIMIT 0,1;
SELECT * FROM MyTable WHERE MyColumn >= 3
UNION
SELECT * FROM MyTable WHERE MyColumn < 3 ORDER BY MyColumn DESC LIMIT 1