【问题标题】:SQLite query to select one row and return it with 2 next rowsSQLite 查询以选择一行并将其与 2 下一行一起返回
【发布时间】:2018-12-13 19:10:46
【问题描述】:

我的数据库是这样的

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

我正在寻找的结果是,例如,如果 macparameter 是 ab:cd:17level = -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) 参数的第一条记录,以及接下来的两条ID 最高的记录。如果我的表有多个具有相同参数值的记录怎么办?有没有办法获取所有匹配的记录和 ID 最高的 2 个下一个?(示例数据)

【问题讨论】:

    标签: android sql sqlite


    【解决方案1】:

    假设“下一行”是指“具有下一个最高 id 的行”,您可以使用子查询获取所需行的 id,然后使用 order bylimit 获取接下来的两行:

    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;
    

    【讨论】:

    • 您好,我不想添加关于同一查询的新问题。我刚刚编辑了其中的一部分。如果你能看看就好了。
    • @masoholic 。 . .您应该使用适当的样本数据和期望的结果提出一个新问题。特别是,要具体说明在重复的情况下该怎么做,特别是如果第二个 id 出现 3 次。
    猜你喜欢
    • 2022-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-12
    • 2011-03-13
    • 1970-01-01
    • 2014-08-02
    相关资源
    最近更新 更多