Como localizar datas consecutivas com SQL

Como localizar datas consecutivas com SQL

Neste artigo vamos ver como resolver um problema com datas usando SQL. Você vai ver como detectar dias consecutivos. Vamos ver exemplos de como resolver isso no SQL Server e no MySQL

Primeiro vamos criar uma tabela com os dados que usaremos em nossa consulta. A tabela de matrículas vai ter um resumo das matrículas feitas durante uma certa data, agrupadas pelo código do curso.

 

SQL Server

CREATE TABLE matriculas (

id int IDENTITY(1,1) PRIMARY KEY,

curso int,

data date,

quantidade int

);

 

MySQL

CREATE TABLE matriculas (

id int NOT NULL AUTO_INCREMENT,

curso int,

data date,

quantidade int,

PRIMARY KEY (id)

);

 

INSERT INTO matriculas (curso, data, quantidade) VALUES (1, '2024-02-01', 35);

INSERT INTO matriculas (curso, data, quantidade) VALUES (1, '2024-02-02', 13);

INSERT INTO matriculas (curso, data, quantidade) VALUES (1, '2024-02-05', 18);

INSERT INTO matriculas (curso, data, quantidade) VALUES (1, '2024-02-06', 28);

INSERT INTO matriculas (curso, data, quantidade) VALUES (1, '2024-02-09', 7);

INSERT INTO matriculas (curso, data, quantidade) VALUES (1, '2024-02-12', 12);

INSERT INTO matriculas (curso, data, quantidade) VALUES (1, '2024-02-15', 22);

INSERT INTO matriculas (curso, data, quantidade) VALUES (1, '2024-02-16', 16);

INSERT INTO matriculas (curso, data, quantidade) VALUES (2, '2024-02-01', 5);

INSERT INTO matriculas (curso, data, quantidade) VALUES (2, '2024-02-05', 8);

INSERT INTO matriculas (curso, data, quantidade) VALUES (2, '2024-02-09', 7);

INSERT INTO matriculas (curso, data, quantidade) VALUES (2, '2024-02-12', 2);

INSERT INTO matriculas (curso, data, quantidade) VALUES (2, '2024-02-16', 6);

 

Com base nestes dados, podemos ver que tivemos matrículas em dias consecutivos nos dias 01 e 02, 05 e 06 e 15 e 16 de fevereiro para o curso 1. Para o curso 2 não houve matrículas em dias consecutivos. São estes os resultados que desejamos obter em nossa consulta

 

Para fazer isso vamos vincular a tabela com ela mesma usando o ID do curso como referência. Feito este vínculo, vamos filtrar por registros que sejam 1 dia maior ou menor do que a data do registro atual. Para fazer isso no SQL Server utilizamos a função DATEADD, que recebe 3 parâmetros, o tipo de adição que vamos fazer, em nosso caso dias, a quantidade e o valor que vai ser usado no cálculo da nova data.

No SQL Server a solução ficaria da seguinte forma:

 

Select * from matriculas a

inner join matriculas b

on  a.curso = b.curso

and (a.data = DATEADD(day, 1, b.data) OR a.data = DATEADD(day, -1, b.data)) 

 

Já no MySQL a solução ficaria um pouco diferente. Apesar da lógica ser a mesma, a função que permite adicionar dias a uma data tem nome dirente. No MySQL  usamos a função DATE_ADD que recebe 2 parâmetros, a data de referência e a quantidade de dias a adicionar ou remover.

 

Select * from matriculas a

inner join matriculas b

on  a.curso = b.curso

and (a.data = DATE_ADD(b.data, INTERVAL 1 DAY) OR a.data = DATE_ADD(b.data, INTERVAL -1 DAY)) 

 

ENCERRAMENTO

 

Neste artigo você viu como localizar datas consecutivas com SQL.

Se você se interessa por operações com datas no SQL, pode se interessar pelos seguintes artigos:

 

Trabalhando com datas no SQL

 

Calcular a diferença entre horas utilizando SQL

 

Calculando a idade usando MySQL

 

Calculando a idade usando SQL Server

 

Calculando dias úteis utilizando SQL

 

Criando uma tabela calendário com SQL

 

 

Outros conteudos que podem ser de seu interesse

Inserir valores em campos do tipo autonumeração no SQL Server
26/09/2019SQL

Inserir valores em campos do tipo autonumeração no SQL Server

Aprenda como inserir valores em campos de autonumeração no SQL Server

Saiba mais...
Convertendo linhas em colunas no SQL Server usando PIVOT
07/02/2017SQL

Convertendo linhas em colunas no SQL Server usando PIVOT

Aprenda a transformar linhas em colunas no SQL Server

Saiba mais...
Como funciona a lógica da validação do CNPJ
05/09/2021SQL

Como funciona a lógica da validação do CNPJ

Entenda as regras por trás da validação deste importante documento

Saiba mais...

Conteúdo sobre banco de dados sem complicação!


Warning: Cannot modify header information - headers already sent by (output started at /home/storage/f/7d/a9/dbins/public_html/blog/post.php:101) in /home/storage/f/7d/a9/dbins/public_html/blog/ga4_track.php on line 11