首页 > 解决方案 > 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)});

这个查询工作正常,但它只给了我匹配macString.valueOf(level)参数的第一条记录,以及接下来的 2 条最高的记录ID。如果我的表有多个具有相同参数值的记录怎么办?有没有办法获得所有匹配的记录和 2 个具有最高 ID 的下一个?(示例数据)

标签: androidsqlsqlite

解决方案


假设“下一行”是指“具有下一个最高 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;

推荐阅读