考虑到我们可以使用deviceid 对行进行排序和对序列进行计数,因此尝试回答您的问题
请注意,为了工作,您至少应该拥有 sqlite 3.25 版本,因为这需要窗口函数
创建一个带有自动增量deviceid 列的测试表,这将模拟您自己的数据
CREATE TABLE "test" (
"deviceid" INTEGER,
"password" INTEGER,
PRIMARY KEY("deviceid" AUTOINCREMENT)
);
按照您自己的顺序插入行1 1 1 1 0 0 0 0 0 1 1 1 0 0 0 1 1 1 0 1 1 0 1 0 1 1 1 1 1 1 1 1 0 1 1 0 1 1 1 1 1 1 1 1 1 1 0 1 1
DELETE FROM test;
INSERT INTO test (password) VALUES (1);
INSERT INTO test (password) VALUES (1);
INSERT INTO test (password) VALUES (1);
INSERT INTO test (password) VALUES (1);
INSERT INTO test (password) VALUES (0);
INSERT INTO test (password) VALUES (0);
INSERT INTO test (password) VALUES (0);
INSERT INTO test (password) VALUES (0);
INSERT INTO test (password) VALUES (0);
INSERT INTO test (password) VALUES (1);
INSERT INTO test (password) VALUES (1);
INSERT INTO test (password) VALUES (1);
INSERT INTO test (password) VALUES (0);
INSERT INTO test (password) VALUES (0);
INSERT INTO test (password) VALUES (0);
INSERT INTO test (password) VALUES (1);
INSERT INTO test (password) VALUES (1);
INSERT INTO test (password) VALUES (1);
INSERT INTO test (password) VALUES (0);
INSERT INTO test (password) VALUES (1);
INSERT INTO test (password) VALUES (1);
INSERT INTO test (password) VALUES (0);
INSERT INTO test (password) VALUES (1);
INSERT INTO test (password) VALUES (0);
INSERT INTO test (password) VALUES (1);
INSERT INTO test (password) VALUES (1);
INSERT INTO test (password) VALUES (1);
INSERT INTO test (password) VALUES (1);
INSERT INTO test (password) VALUES (1);
INSERT INTO test (password) VALUES (1);
INSERT INTO test (password) VALUES (1);
INSERT INTO test (password) VALUES (1);
INSERT INTO test (password) VALUES (0);
INSERT INTO test (password) VALUES (1);
INSERT INTO test (password) VALUES (1);
INSERT INTO test (password) VALUES (0);
INSERT INTO test (password) VALUES (1);
INSERT INTO test (password) VALUES (1);
INSERT INTO test (password) VALUES (1);
INSERT INTO test (password) VALUES (1);
INSERT INTO test (password) VALUES (1);
INSERT INTO test (password) VALUES (1);
INSERT INTO test (password) VALUES (1);
INSERT INTO test (password) VALUES (1);
INSERT INTO test (password) VALUES (1);
INSERT INTO test (password) VALUES (1);
INSERT INTO test (password) VALUES (0);
INSERT INTO test (password) VALUES (1);
INSERT INTO test (password) VALUES (1);
解决方案:
select password, sum(div_floor) AS Number_of_3_occurences
FROM (
select password, count(*) as cnt_sequence, cast(round(count(*) / 3 ) as int) as div_floor
from (select test.*,
(row_number() over (order by deviceid) -
row_number() over (partition by password order by deviceid)
) as grp
from test
) t
group by grp, password
) ttt
where cnt_sequence>=3
group by password
结果
password Number_of_3_occurences
0 2
1 8