如何获取SQLite按rowid倒序查询结果中指定项的位置
获取指定记录在查询结果中的位置
针对你的需求,有两种常用方法可以获取"B"在SELECT MyText FROM MyTable ORDER BY rowid DESC结果中的位置:
方法一:使用窗口函数(SQLite 3.25.0+)
利用ROW_NUMBER()窗口函数给排序后的结果分配行号,再筛选目标记录的行号:
SELECT row_num FROM ( SELECT MyText, ROW_NUMBER() OVER (ORDER BY rowid DESC) AS row_num FROM MyTable ) AS ranked WHERE MyText = 'B';
内层查询会按rowid倒序给每条记录生成递增的行号,外层查询直接提取"MyText"为"B"的行号,执行后会返回2。
方法二:兼容旧版SQLite(无窗口函数支持)
通过自连接统计目标记录之前的行数,再加1得到位置:
SELECT COUNT(*) + 1 AS row_num FROM MyTable WHERE rowid > (SELECT rowid FROM MyTable WHERE MyText = 'B');
原理是:按rowid倒序时,rowid比"B"更大的记录会排在它前面,统计这些记录的数量再加1,就是"B"的位置。
内容的提问来源于stack exchange,提问作者JnLlnd
相关产品推荐
相关产品推荐

