【发布时间】:2019-05-10 09:18:34
【问题描述】:
我正在使用 Sqlite 3。
在调用 sqlite3_step() 之前,我需要知道当前行是否是 SQL 查询结果中的最后一行。
检查现有帖子后
SQLite3 - how to know if the current row is the last row
和
How to check if the current row is the last selected row in a sql query?
由于SQlite3中的每一行都有一个ROWID,我想办法写代码,如下:
SELECT (ROWID = MAX(ROWID)) AS IsLast FROM MyTable ORDER BY ROWID;
MyTable 中的数据是:
|BID|
|3|
|2|
|5|
|7|
预期的结果是除了最后一行之外的所有行都是FALSE,如下:
|0|
|0|
|0|
|1|
但实际结果是:
|1|
此外,我尝试将代码集成到更复杂的查询中,查询来自SQL select only rows with max value on a column,如下所示:
SELECT a.id, a.rev, a.contents, b.mycount, (a.ROWID = MAX(a.ROWID)) AS IsLast
FROM YourTable a
INNER JOIN (
SELECT id, MAX(rev) rev, COUNT(id) mycount
FROM YourTable
GROUP BY id
) b ON a.id = b.id AND a.rev = b.rev ORDER BY a.ROWID;
以原帖中的原表为例:
+------+-------+--------------------------------------+
| id | rev | content |
+------+-------+--------------------------------------+
| 1 | 1 | ... |
| 2 | 1 | ... |
| 1 | 2 | ... |
| 1 | 3 | ... |
+------+-------+--------------------------------------+
使用查询后,预期的结果应该是(最后一列是IsLast标志):
|2|1|...|1|0|
|1|3|...|3|1|
但实际结果只有一行:
|1|3|...|3|1|
有什么问题?
谢谢
【问题讨论】:
-
您能提供一些示例数据并期待结果吗?
-
AFAIK,您可以改用
rownumber() over (order by rowid desc),当它返回1时,您现在是最大值rowid-HTH ;)。