請參閱識別 SQLite 表中缺失的序列,以了解原始問題和解決方案。
下面的代碼可以正確識別缺失的序列,但是,它的起點是基于表中資料的序列中的最低數字。因此,例如,如果序列應該從1開始,但資料中的第一個序列以5開始,那么1...4就不包括在結果中。
對于如何使用預定義的開始序列進行測驗,有什么提示嗎?
SELECT dir, start, stop
FROM (
SELECT m.id 1 start,
(SELECT MIN(id) - 1 FROM sequence x WHERE x. __dirpath = m.__dirpath AND x.id > m.id) stop,
m.__dirpath dir
FROM sequence m LEFT JOIN sequence r
ON m.__dirpath = r.__dirpath AND m. id = r.id - 1
WHERE r.id IS NULL
)
WHERE stop IS NOT NULL )
ORDER BY dir, start, stop;
uj5u.com熱心網友回復:
你所要做的就是在資料集中為每個__dirpath包括1行,id等于0,只要這樣的行在表中不存在,因為最小可能的id是1。
你可以用UNION ALL在一個CTE內完成。
然后在你的查詢中使用該CTE:
WITH cte AS (
SELECT __dirpath, id FROM sequence
UNIONALL
SELECT DISTINCT __dirpath, '0'/span> FROM sequence
)
SELECT dir, start, stop
FROM (
SELECT m.id 1 start,
(SELECT MIN(id) - 1 FROM cte x WHERE x. __dirpath = m.__dirpath AND x.id > m.id) stop。
m.__dirpath dir
FROM cte m LEFT JOIN cte r
ON m.__dirpath = r.__dirpath AND m. id = r.id - 1
WHERE r.id IS NULL
)
WHERE stop IS NOT NULL )
ORDER BY dir, start, stop;
請看demo。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/327111.html
標籤:
下一篇:為什么這個查詢在AndroidStudio中AppInspection的DatabaseInspector部分可以作業,而在RoomQuery中卻不行?
