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]])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
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.