Android中的范围查询
我有一张如下所示的表格Android中的范围查询,android,sql,sqlite,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)
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 ie 3的所有值,而不是74和78的值。任何人都可以建议我如何更新上述查询。提前感谢您因为您使用的是偏移量-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);
您可以使用子查询获取表中最近的数字,即减法后绝对值较低的数字,然后在主查询中获取减法后绝对值相同的数字所在的行
cursor=db.rawQuery("SELECT * FROM table where ABS("+inputNumber+"-number)=(SELECT MIN(ABS("+inputNumber+"-number)) FROM table)", null);
如果您只需要与输入的差值为+-5的数字,则可以在SQL中检查ABSinputNumber number,您可以执行以下操作:
cursor=db.rawQuery("SELECT * FROM table where ABS("+inputNumber+"-number)=(SELECT MIN(ABS("+inputNumber+"-number)) FROM table) AND ABS("+inputNumber+"-number)<=5", null);
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));
谢谢你:作品完美: