Я использую Sqlite 3.
Мне нужно знать, является ли текущая строка последней в результате запроса SQL, прежде чем вызывать sqlite3_step ().
После проверки существующихpost
SQLite3 - как узнать, является ли текущая строка последней строкой
и
Как проверить, является ли текущая строкапоследняя выбранная строка в запросе sql?
Поскольку каждая строка в 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 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;
Takeисходная таблица в исходном сообщении в качестве примера:
+------+-------+--------------------------------------+
| id | rev | content |
+------+-------+--------------------------------------+
| 1 | 1 | ... |
| 2 | 1 | ... |
| 1 | 2 | ... |
| 1 | 3 | ... |
+------+-------+--------------------------------------+
После использования запроса ожидаемый результат должен быть (столбец ast - это флаг IsLast):
|2|1|...|1|0|
|1|3|...|3|1|
Но фактический результат - только одна строка:
|1|3|...|3|1|
В чем проблема?
Спасибо