Usando a função de atraso em mysql

Usando a função de atraso em mysql
MySQL versão 8.0 introduziu as funções da janela MySQL, permitindo que você realize consultas em um método mais fácil e organizado. Assim, aumentando o processamento e o desempenho. Tais funções incluem: rank (), row_rank (), last_value () e muito mais.

Neste tutorial, vamos nos concentrar em usar uma das funções MySQL: LAG (). É uma função de janela que permite acessar e buscar o valor das linhas anteriores da linha atual dentro do mesmo conjunto de resultados.

Sintaxe básica

A sintaxe geral para usar a função mySql lag () é:

Lag (expressão, OffsetValue, DefaultVar) sobre (
Partição por [expressão]
Ordem por expressão [ASC | DEC]
);

Vamos tomar um momento para explicar alguns dos parâmetros na sintaxe da função lag ().

Eles são os seguintes:

Expressão: Este é o valor retornado pela função da linha que lidera a linha atual pelo valor de deslocamento especificado.

OffsetValue: Este valor representa o número de linhas que precedem a linha atual para obter o valor. Este valor deve ser um 0 ou um valor superior a 0.

OBSERVAÇÃO: O valor de 0 representa a linha atual.

DefaultVar: Este valor é retornado como o valor padrão pela função se não houver linha anterior. Se o valor padrão estiver indefinido no parâmetro de função e não existir uma linha anterior, a função retorna um valor nulo.

Partição por: A cláusula de partição por. A função de atraso é então aplicada às partições divididas.

ORDENAR POR: Como de costume, este valor especifica a ordem das linhas nas partições disponíveis.

Exemplo de uso de casos

Vejamos o exemplo de exemplo, use casos da função lag () para entender como funciona. Comece criando um amostra de banco de dados chamado sample_db;

Soltar o banco de dados se existir sample_database;
Criar Database Sample_database;
Use sample_database;
Soltar a tabela se existir usuários;
Crie usuários de tabela
(
id int a chave primária Auto_increment,
Nome Varchar (255),
Pontuação int,
Data de inscrição
);
Insira nos usuários (id, nome, pontuação, inscrição)
Valores (1, "Alexandra", 99, '2021-01-10'),
(2, "Jacob", 81, '2021-05-20'),
(3, "Leonard", 67, '2020-01-02'),
(4, "Peter", 88, '2021-03-03'),
(5, "Amy", 100, '2021-05-05');
Selecione * dos usuários;

Agora que temos um banco de dados de amostra para trabalhar, podemos prosseguir e ilustrar como trabalhar com a função de lag mysql.

Exemplo 1: Função de atraso sem valor padrão
Considere o exemplo abaixo que aplica a função de atraso no Entroll_date com um valor de deslocamento de 1.

Selecione *, LAG (Enroll_date, 1) sobre (Ordem por id ASC) como anterior_date de sample_database.Usuários;

Depois de executar a consulta acima, obtemos uma nova coluna anterior_date que mantém o valor anterior da linha, conforme especificado com um valor de deslocamento de 1. Como não há valor anterior na primeira linha, o valor é nulo.

Nota: Você pode especificar o valor padrão se uma linha não tiver um valor anterior.

A saída é como mostrado abaixo:

Exemplo 2: Função de atraso com valor padrão
Você também pode especificar um valor padrão para uma linha onde o valor anterior não existe. Em nosso exemplo, definiremos o valor padrão na data atual.

Nota: Neste exemplo, também definiremos o valor de deslocamento como 2 em vez de 1.

Considere a consulta abaixo:

Selecione *, LAG (Enroll_date, 2, Curdate ()) sobre (Ordem por id ASC) como anterior_date de sample_database.Usuários;

Depois de executar a consulta acima, obteremos valores com um valor de deslocamento de dois e a data atual como padrão para valores nulos.

A saída é como mostrado abaixo:

Exemplo 3: Função de atraso com partição por
Podemos usar a função Lag () com a cláusula de partição por. Esta cláusula primeiro agrupa os dados em vários subconjuntos lógicos e depois aplica a função de atraso às partições.

Antes de prosseguir, vamos ver os dados na tabela do usuário. Considere a seguinte consulta:

Insira nos usuários (id, nome, pontuação, inscrição)
Valores (1, "Alexandra", 99, '2021-01-10'),
(2, "Jacob", 81, '2021-05-20'),
(3, "Leonard", 67, '2020-01-02'),
(4, "Peter", 88, '2021-03-03'),
(5, "Amy", 100, '2021-05-05'),
(6, "Tobias", 100, '2020-06-06'),
(7, "Kurtzman", 67, '2020-07-10'),
(8, "imortal", 50, '2021-03-01'),
(9, "Anthony", 81, '2021-01-01'),
(10, "James", 77, '2021-02-03');

Agora que temos uma tabela com 10 valores, podemos particionar os dados pela pontuação e depois aplicar a função de atraso.

A operação acima é ilustrada na consulta abaixo:

Selecione *, Lag (Enroll_date, 1, Curdate ()) sobre (Partição por ordem de pontuação por id ASC) como anterior_date de sample_database.Usuários;

Na consulta acima, começamos dividindo os dados com base na pontuação e depois aplicando a função de atraso com um valor de deslocamento de 1. Também definimos o valor padrão como a data atual. O resultado da saída é como mostrado abaixo:

Nota: Você também pode observar que a primeira linha de todas as partições contém a data atual, o que significa que não há valor anterior na linha set.

Conclusão

Este tutorial discutiu como a função Lag () funciona para obter valores das linhas anteriores na linha atual.

Para recapitular:

  • A função MySQL é uma função de janela que obtém o valor da linha anterior com base no valor de deslocamento especificado. Ou seja, se o valor do deslocamento for 1, ele obtém o valor diretamente acima dele.
  • Por padrão, a função lag () usa um valor de deslocamento de 1, a menos que explicitamente especificado.
  • Se os dados estiverem fora de intervalo (nenhum valor anterior no deslocamento especificado), o valor será definido como nulo.
  • A função lag () também aceita a partição por cláusula, que agrupa os dados em várias partições lógicas com base na coluna ou condição especificada.

Obrigado pela leitura.