我有一张桌子如下所示
number Value
77 ss
74 aa
77 ww
78 ee
77 ii
74 pp
我正在编写一个范围查询来获取最接近的值
cursor=db.rawQuery("SELECT * FROM table WHERE number BETWEEN -5 AND +5 ORDER BY ABS( "+inputNumber+" - number) ", null);
如果输入数字是76,那么我将获得77,78,74的所有值。但我想要最近的价值观。这里76的最近值是77,我想要77的所有值(即该表中的3个值),而不是74和78的值。任何一个建议我如何更新上述查询。提前感谢你
答案 0 :(得分:0)
由于你使用的是偏移-5和+5,你的范围将是76-5 = 71到76 + 5 = 81。因此,您将检索该范围内的所有值。
您可以尝试使用TOP关键字代替使用范围:
cursor=db.rawQuery("SELECT TOP 3 number, Value FROM table ORDER BY ABS("+inputNumber+" - number) ", null);
答案 1 :(得分:0)
您可以使用子查询来获取表中最接近的数字(减去绝对值后的数字),然后在主查询中获取具有此数字的行(在减去后具有相同的绝对值)。
cursor=db.rawQuery("SELECT * FROM table where ABS("+inputNumber+"-number)=(SELECT MIN(ABS("+inputNumber+"-number)) FROM table)", null);
如果您只想要与输入的差值为+ -5的数字,您可以检查ABS(inputNumber-number)< = 5,如下所示:
cursor=db.rawQuery("SELECT * FROM table where ABS("+inputNumber+"-number)=(SELECT MIN(ABS("+inputNumber+"-number)) FROM table) AND ABS("+inputNumber+"-number)<=5", null);
答案 2 :(得分:0)
在SQL
中,您可以执行以下操作:
select * from table1 where number in
(select number from
(select distinct number,number - 76 as def from table1 where number > 76 - 5
union
select distinct number,76 - number as def from table1 where number < 76 + 5)t1
where t1.def =
(select min(def) from
(select distinct number,number - 76 as def from table1 where number > 76 - 5
union
select distinct number,76 - number as def from table1 where number < 76 + 5)t
where def >= 0));