Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android中的范围查询_Android_Sql_Sqlite - Fatal编程技术网

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

谢谢你:作品完美: