在下表中,我称之为TableA的是两个数字列。我需要创建一个Select语句,指定B的值。返回一行或两行。不确定这是否可以在单个sql语句中完成。如果存在B的值匹配的行,则返回该行。如果B的值介于最接近其值的两个B值之间,则返回两个值。如果存在的值大于它但不存在小于它的值,则返回的值越大。如果不存在较大的值但是较小的值存在,则返回具有较小值的行。这里有些例子。如果sql在sqlite中工作会很好:
A B
50 400
10 200
30 100
40 800
20 500
B = 10
A B
30 100
----------
B = 250
A B
10 200
50 400
----------
B = 100
A B
30 100
----------
B = 410
A B
50 400
20 500
----------
B = 900
A B
40 800
答案 0 :(得分:1)
SELECT * FROM A WHERE B = 10
UNION
SELECT * FROM A WHERE B = (SELECT MAX(B) FROM A WHERE B < 10)
UNION
SELECT * FROM A WHERE B = (SELECT MIN(B) FROM A WHERE B > 10);
看到它在sqlfiddle中正常工作。
答案 1 :(得分:1)
SELECT * FROM TableA WHERE B = (SELECT MAX(B) FROM TableA WHERE B <= 10)
UNION
SELECT * FROM TableA WHERE B = (SELECT MIN(B) FROM TableA WHERE B >= 10)