用于选择最接近值的sql语句

时间:2013-06-21 08:59:40

标签: sql sqlite

在下表中,我称之为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

2 个答案:

答案 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)