Atraso SQL

Atraso Sql



A função SQL lag() permite acessar a linha anterior da linha atual em um deslocamento específico. Resumindo, a função lag() permite acessar a linha anterior da atual. Ao especificar o valor do deslocamento, você pode acessar as 1, 2, 3, etc. linhas anteriores da atual.

É o oposto da função lead() que permite acessar as linhas subsequentes.







Atraso SQL()

A sintaxe da função é a seguinte:



LAG(expressão_valor, deslocamento [, padrão])
SOBRE (
[PARTIÇÃO POR partição_expressão]
ORDER BY sort_expression [ASC | DESC]
);

A seguir estão os argumentos suportados:



  • expressão_valor – Especifica o valor de retorno da linha anterior. A expressão deve ser avaliada como um único valor.
  • desvio – Especifica quantas linhas anteriores à linha atual devem ser acessadas.
  • padrão – Define o valor padrão se o deslocamento estiver fora do escopo da partição. Por padrão, o valor é definido como NULL.
  • Particionar por – Especifica como particionar os dados.
  • Ordenar por – Define o formato de ordem das linhas em cada partição.

Configuração de dados de amostra

Antes de nos aprofundarmos no funcionamento da função lag(), vamos começar configurando uma tabela básica para fins de demonstração.





CRIAR TABELA produtos (
product_id INT CHAVE PRIMÁRIA AUTO_INCREMENT,
nome_do_produto VARCHAR(255),
categoria VARCHAR(255),
preço DECIMAL(10, 2),
quantidade INT,
data_de_expiração DATA,
código de barras BIGINT
);

inserir
em
produtos (nome_do_produto,
categoria,
preço,
quantidade,
data de validade,
código de barras)
valores ('Chapéu de Chef 25cm',
'padaria',
24,67,
57,
'09/09/2023',
2854509564204);

inserir
em
produtos (nome_do_produto,
categoria,
preço,
quantidade,
data de validade,
código de barras)
valores ('Ovos de codorna - enlatados',
'despensa',
17,99,
67,
'2023-09-29',
1708039594250);

inserir
em
produtos (nome_do_produto,
categoria,
preço,
quantidade,
data de validade,
código de barras)
valores ('Café - Egg Nog Capuccino',
'padaria',
92,53,
10,
'2023-09-22',
8704051853058);

inserir
em
produtos (nome_do_produto,
categoria,
preço,
quantidade,
data de validade,
código de barras)
valores ('Pêra - Espinhosa',
'padaria',
65,29,
48,
'2023-08-23',
5174927442238);

inserir
em
produtos (nome_do_produto,
categoria,
preço,
quantidade,
data de validade,
código de barras)
valores ('Massa - Cabelo de Anjo',
'despensa',
48,38,
59,
'05/08/2023',
8008123704782);

inserir
em
produtos (nome_do_produto,
categoria,
preço,
quantidade,
data de validade,
código de barras)
valores ('Vinho - Prosecco Valdobiaddene',
'produzir',
44,18,
3,
'2023-03-13',
6470981735653);

inserir
em
produtos (nome_do_produto,
categoria,
preço,
quantidade,
data de validade,
código de barras)
valores ('Pastelaria - Mini Francês Sortido',
'despensa',
36,73,
52,
'2023-05-29',
5963886298051);

inserir
em
produtos (nome_do_produto,
categoria,
preço,
quantidade,
data de validade,
código de barras)
valores ('Laranja - Enlatado, Mandarim',
'produzir',
65,0,
1,
'2023-04-20',
6131761721332);

inserir
em
produtos (nome_do_produto,
categoria,
preço,
quantidade,
data de validade,
código de barras)
valores ('Porco - Ombro',
'produzir',
55,55,
73,
'01/05/2023',
9343592107125);

inserir
em
produtos (nome_do_produto,
categoria,
preço,
quantidade,
data de validade,
código de barras)
valores ('Dc Hikiage Hira Huba',
'produzir',
56,29,
53,
'2023-04-14',
3354910667072);

Com a criação e configuração dos dados concluídas, vamos discutir alguns exemplos.

Exemplo 1: Uso Básico

Neste caso, temos acesso a uma tabela “produtos” que contém as informações do produto. Suponha que queiramos obter o código de barras anterior da linha atual.



Podemos usar a função lag() da seguinte forma:

selecione
Nome do Produto,
preço,
lag(código de barras) over (partição por categoria
ordenar por
preço asc) como item_anterior
de
produtos p;

O código fornecido particiona os dados com base na categoria. Em seguida, ele busca o código de barras anterior na partição usando a função lag().

A saída resultante é a seguinte:

Exemplo 2: Configurando o valor padrão

Se não houver linha anterior em uma coluna específica (fora do limite), a função definirá o valor como NULL conforme mostrado no exemplo anterior.

Para definir um valor padrão para qualquer acesso fora do escopo, podemos fazer o seguinte:

selecione
Nome do Produto,
preço,
lag(código de barras, 1, 'N/A') over (partição por categoria
ordenar por
preço asc) como item_anterior
de
produtos p;

Definimos o valor padrão como “N/A”. Isso deve substituir qualquer valor fora do limite, conforme mostrado na saída:

Exemplo 3: Valor de deslocamento personalizado

Suponha que você queira acessar as duas linhas anteriores da linha atual. Podemos fazer isso definindo o valor do deslocamento como 2.

Um exemplo de consulta é ilustrado a seguir:

selecione
Nome do Produto,
preço,
lag(código de barras, 2, 'N/A') over (partição por categoria
ordenar por
preço asc) como item_anterior
de
produtos p;

Saída:

Esta consulta retorna as duas linhas anteriores em cada partição.

Conclusão

Neste tutorial, aprendemos como trabalhar com a função lag() para obter o item anterior da linha atual.