Lag PostGresql

Lag PostGresql

PostgreSQL Lag function () é usado para acessar a linha na tabela que está presente antes da linha atual da tabela. Como o nome indica que fica atrás da linha atual e leva o registro da tabela. No PostgreSQL, a função de atraso é importante para comparar as linhas anteriores com a linha atual.

Esta função é adequada para saber sobre os dados que você inseriu anteriormente, mas está presente na linha atual. Então você pode acessar os dados do passado. Abra o PSQL e, depois de fornecer uma senha, agora você pode aplicar todos os comandos no shell PSQL.

Sintaxe

Atraso (expressão [deslocamento [valor]])
SOBRE (
[Partição por expressão,…]
Ordem por expressão [ASC | Desc],…
)

Um deslocamento é um número inteiro definido na consulta e mostra o número de linhas presentes acima da linha atual. Pode ser uma subconsulta ou uma expressão.

A função de atraso é aplicada à partição do valor, que é criada principalmente por uma cláusula de partição. Ao mesmo tempo, o pedido por cláusula é usado para organizar as linhas em um pedido especificado.

Existem duas características principais da função de atraso que descrevemos aqui estão:

  • LAG Partição padrão
  • A função de atraso em partições.

LAG Partição padrão

Temos uma tabela chamada "Showroom" com os detalhes dos veículos. A tabela é criada pela consulta "Criar tabela" no PSQL e adicionando os dados usando uma instrução "inserir".

>> selecione * no showroom;

Aplicaremos a função de atraso na tabela. A função de atraso contém duas ou mais declarações "selecione". Como precisamos selecionar o valor antes da linha atual, a linha atual é selecionada na primeira etapa e depois a linha antes dela.

Exemplo 1

Neste exemplo, selecionaremos uma coluna da tabela e calcularemos a soma da coluna de preços. A segunda instrução SELECT usará a função de atraso. Ambas as declarações usam a cláusula "Order by" com "Grupo por" na função agregada de selecionar. Como nenhum ano é semelhante ao outro, todas as linhas serão exibidas. Não haverá agrupamento. Agora aplicamos o comando na tabela:

>> Com CTE AS (selecione Ano, Sum (preço) Preço do grupo Showroom por ordem por ano por ano) Selecionar ano, preço, atraso (preço, 1) (ordem por ano) anterior_year_discount da CTE;

Para imprimir o valor da linha acima da linha atual, primeiro acessamos a linha atual através da instrução SELECT e calculamos a função de soma. O valor obtido é armazenado em "CTE" para uso posterior na última consulta. O valor resultante será ordenado e agrupado pela coluna "Ano".

Movendo -se em direção à segunda instrução SELECT, as mesmas colunas em "CTE" são selecionadas da tabela. Uma coluna adicional é criada com o nome "Anterior_year_discount", tendo lag com 1 linha. E as linhas da coluna resultante devem ser organizadas pela coluna do ano.

Você pode ver na tabela obtida que a primeira linha na nova coluna está em branco. Porque o preço é transferido para a próxima linha desde o início, fazendo o nulo de primeira linha.

Exemplo 2

Há outro exemplo; Aqui, estamos usando três declarações selecionadas. "CTE" e "CYE" são usados ​​para armazenar os valores obtidos a partir das duas consultas usando a instrução "Selecionar", e seus valores resultantes serão usados ​​na terceira instrução SELECT. A saída de "CTE" atua como uma saída para "CTE2". Da mesma forma, "CTE2" será a entrada para a terceira instrução SELECT. Todos os valores são exibidos na tabela resultante combinada porque um resultado é uma função de atraso, enquanto a segunda coluna resultante mostra a diferença entre os dois valores de atraso.

Movendo -se em direção ao primeiro "CTE" calcula a mesma função do exemplo anterior. A soma é calculada a partir da coluna "preço".

>> Com CTE como (selecione Ano, Sum (preço) Preço do grupo Showroom em ordem de ano a ano),

O segundo "CTE2" é semelhante ao segundo comando selecionado porque sabemos que a função de atraso é aplicada na soma da coluna "Price". A coluna dessa soma "anterior_year_discount" é armazenada como está no CTE.

>> cte2 como (selecione ano, preço, atraso (preço, 1) (ordem por ano) anterior_year_discount da cte)

A terceira declaração "seleção" aceitará a soma atrasada dos preços e calculará sua diferença. Por exemplo, o preço na terceira linha subtraia o valor na segunda linha. Ao mesmo tempo, a primeira linha é nula por causa da função de atraso.

>> Selecione ano, preço, anterior_year_discount, (anterior_year_discount - preço) diferença de CTE;

A 4ª coluna é nomeada a diferença porque usa o operador menos para subtrair os valores na 3ª coluna.

Para cada linha, o valor da 3ª coluna é subtraído da linha anterior. Por exemplo (3ª -2ª), (4ª -3ª) e assim por diante. E o valor subtraído é escrito na frente do primeiro valor (subtraído do próximo valor). Mas no dia 6, a última linha na coluna "Diferença", a resposta é escrita que é obtida subtraindo a 1ª linha da 2ª linha, o valor do ano 2021.

Exemplo 3

Considere outro exemplo em que o mesmo conceito é aplicado à tabela. Mas o atraso é 2 em vez de um. Uma única instrução SELECT exibe os preços, não a soma ou qualquer outra função agregada.

>> Selecione ano, preço, atraso (preço, 2) sobre (ordem por ano) desconto no showroom;

O valor resultante mostra que o preço na coluna de desconto é deslocado duas fileiras para baixo. Isso significa que acessamos as linhas antes da linha atual da tabela.

Função de atraso nas partições

Via pgadmin

Em Pgadmin, depois de fornecer a senha, agora você pode acessar o banco de dados e todo o conteúdo presente. Vá para a ferramenta de consulta das mesas. Agora crie novos nomes de tabela "team_members".

>> Criar tabela Team_members (nome Varchar (100), ID Int, Ano Inteiro, Inteiro Salário);

Depois de criar a tabela, agora adicione valores à tabela.

>> Inserir em team_members (nome, ID, ano, salário) valores ('salar', 1, 2018, 180000);

Depois que os valores forem inseridos, agora aplique a consulta.

A função Lag () neste tipo compara o salário de um ano com o último ano de cada grupo.

>> Selecione Ano, Salário, ID, Lag (Salário, 1) Over Partition by ID (Ordem por ano) Desconto de Team_Members;

Neste exemplo, os IDs são agrupados coletivamente. A partição distribuirá as linhas para o grupo, pois você pode ver que todos os mesmos IDs estão presentes juntos. E a coluna de desconto mostra a comparação do salário de uma linha com a segunda linha, tendo o atraso de 1.

Conclusão

"Função de atraso" é usada para buscar o registro que você inseriu antes da linha atual que você selecionou. Duas categorias principais de função de atraso são discutidas aqui com exemplos. Selecione, a ordem por são usados ​​além da “Partição por cláusula”. Esta função no PostgreSQL pode ser aplicada dentro da tabela e depois aplicar operações diferentes nelas.