检查sqlite3中的特定序列

时间:2019-01-21 10:21:20

标签: sqlite

我想在数据库中查找特定的序列出现。 示例:考虑具有下表:

enter image description here

考虑一下,我要检查表格是否具有以下顺序: 555 222 444 。 我想显示序列不匹配的地方:

enter image description here

Ho头可以这样做吗?

1 个答案:

答案 0 :(得分:1)

窗口函数(在Sqlite 3.25中添加,因此以下需求或更高版本)使轻松查看下一行成为可能:

创建并填充示例表(发布数据的图像确实没有用;最好使用INSERT语句或CSV文本)

CREATE TABLE seq(num INTEGER PRIMARY KEY, value INTEGER);
INSERT INTO seq VALUES (1, 111), (2, 555), (3, 222), (4, 444), (5, 333)
                     , (6, 111), (7, 555), (8, 222), (9, 111), (10, 333)
                     , (11, 555), (12, 444), (13, 111), (14, 333), (15, 444);

查询:

WITH leads AS (SELECT num, value
                    , lead(value, 1) OVER (ORDER BY num) AS next1
                    , lead(value, 2) OVER (ORDER BY num) AS next2
               FROM seq)
SELECT CASE WHEN next1 = 222 AND next2 = 444 THEN 'MATCH' ELSE 'FAIL' END AS result
     , num AS start
     , CASE WHEN next1 = 222 AND next2 = 444 THEN num + 2 ELSE num + 1 END AS "end"
FROM leads
WHERE value = 555
ORDER BY num;

产生

result      start       end       
----------  ----------  ----------
MATCH       2           4         
FAIL        7           8         
FAIL        11          12  

(以上所有条件均假设您使用num列来确定顺序)