Android中的范围查询

时间:2014-04-08 06:49:10

标签: android sql sqlite

我有一张桌子如下所示

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的值。任何一个建议我如何更新上述查询。提前感谢你

3 个答案:

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

SQL Fiddle