Eu tenho um banco de dados SQLite, vamos supor que o id possa ser considerado como a ordem das linhas, quero encontrar sequências repetidas na tabela de acordo com determinados critérios.
considere este exemplo ( http://sqlfiddle.com/#!5/dbdb0/1 )
esquema + dados:
CREATE TABLE eventLog
(
id integer primary key autoincrement,
type varchar(20),
details varchar(30)
);
INSERT INTO eventLog
(type, details)
VALUES
('power', 'power on');
INSERT INTO eventLog
(type, details)
VALUES
('cleaner', 'cleaning started');
INSERT INTO eventLog
(type, details)
VALUES
('cleaner', 'cleaning finished');
INSERT INTO eventLog
(type, details)
VALUES
('power', 'power off');
INSERT INTO eventLog
(type, details)
VALUES
('power', 'power on');
INSERT INTO eventLog
(type, details)
VALUES
('cleaner', 'cleaning started');
INSERT INTO eventLog
(type, details)
VALUES
('power', 'power off');
Consulta básica:
select * from eventLog
order by id asc
Destaquei algumas sequências: se eu olhar as sequências repetidas em "detalhes" o resultado deverá ser os ids: [1,2][5,6] e se eu olhar a coluna "tipo" o resultado deverá ser [[ 1,2][5,6]],[[3,4][6,7]].
Existe uma maneira de consultar sequências repetidas sem programação externa - usando apenas SQL?
Você pode usar funções OLAP ou de janela. Exemplo para detalhes, você também pode adicionar uma coluna derivada para o tipo:
Se quiser uma solução mais genérica, você pode adicionar uma tabela que contenha pares consecutivos de seu interesse e usá-la em sua consulta
Se você não se importa com quais detalhes são consecutivos, basta que ocorram várias vezes:
Você pode até procurar repetições de vários comprimentos, aqui 2 e 3:
banco de dados<> violino