android - SQLite 查询以选择一行并将其与 2 下一行一起返回
问题描述
我的数据库看起来像这样
ID SSID BSSID RSSI
1. ABCD ab:cd:17 -68
2. efgh cd:as:25 -60
3. ijkl cs:gb:d6 -75
4. abcd dc:5g:f4 -72
....
518. ABCD ab:cd:17 -68
519. asfd ag:4g:32 -60
520. aasd gd:5g:56 -79
我正在尝试创建一个函数,该函数根据函数的输入参数选择行并返回该行和下一行 2。
到目前为止,我所做的是该函数返回具有匹配参数的记录。
public Cursor getRequiredData(String mac, int level){
SQLiteDatabase db = this.getReadableDatabase();
Cursor res = db.rawQuery("SELECT BSSID, RSSI FROM Scans_table WHERE BSSID =? AND RSSI =?", new String[] {mac, String.valueOf(level)});
return res;
}
我正在寻找的结果是,例如,如果mac
参数是ab:cd:17
并且level = -68
函数返回第 1、2、3 行(提供的示例数据)
编辑:
Cursor res = db.rawQuery("SELECT * from Scans_table st where ID >= " +
"( select ID from Scans_table where BSSID =? AND RSSI =? ) order by st.ID asc limit 3 ", new String[] {mac, String.valueOf(level)});
这个查询工作正常,但它只给了我匹配mac
和String.valueOf(level)
参数的第一条记录,以及接下来的 2 条最高的记录ID
。如果我的表有多个具有相同参数值的记录怎么办?有没有办法获得所有匹配的记录和 2 个具有最高 ID 的下一个?(示例数据)
解决方案
假设“下一行”是指“具有下一个最高 id 的行”,您可以使用子查询来获取所需行的 id,然后order by
获取limit
接下来的两行:
select st.*
from scans_table st
where st.id >= (select st2.id from scans_table st2 where <your conditions are here>)
order by st.id asc
limit 3;
推荐阅读
- docker - 当我执行命令时,symfony 5“快速通道”书错误泊坞窗
- django - 如何使一个字段依赖于Django中一个模型内的另一个字段
- mongodb - 邮递员不验证现有的电子邮件 golang
- windows - 如何在 30 秒内自动更改 IP 地址?
- css - 如何在使用 CSS 网格布局时删除此空白?
- python - 无法在 python 中使用 register() 注册模式
- android - 带有测试版的 Android 预发布应用程序存在问题?
- python - 将多行除以熊猫数据框中的单组值
- javascript - 如何避免在我的 django 前端重新加载页面?
- r - 如果条件不满足,希望在 mutate() 中使用 if_else() 时保留原始值