Função de atraso do servidor SQL

Função de atraso do servidor SQL

A função de atraso no SQL Server é uma função Windows introduzida no SQL Server 2012. Esta função permite buscar os dados de linhas anteriores, conforme o valor de deslocamento especificado. Pense na função de atraso como a capacidade de acessar dados de linhas anteriores da linha atual.

Por exemplo, na linha atual, você pode acessar a linha anterior, que se torna a linha atual, e você pode acessar a linha anterior, e assim por diante.

Neste artigo, aprenderemos a usar a função de atraso no SQL Server usando vários exemplos.

Função sql server lag ()

Nós expressamos a sintaxe da função como:

Lag (expressão, deslocamento [, padrão])
SOBRE (
[Partição por partition_by_expression]
order_by_clause
)

Parâmetros de função e valor de retorno

Na sintaxe acima, temos os seguintes parâmetros:

  1. Expressão - uma coluna ou expressão usada pela função de atraso para executar os cálculos. Este é um parâmetro necessário, e a expressão deve retornar um único valor.
  2. Desvio - Um valor inteiro positivo que define quantas linhas de volta a função de atraso irão recuperar. Se não for especificado, o valor padrão é definido como 1.
  3. Padrão - Especifica o valor padrão retornado pela função se o valor de deslocamento especificado vai além do escopo da partição. Por padrão, a função retorna nulo.
  4. Partition_by_expression - Uma expressão usada para criar partições de dados lógicas. O SQL Server aplicará a função de atraso aos conjuntos de partições resultantes.
  5. Order_by_clause - uma expressão para definir como as linhas nas partições resultantes são ordenadas.

A função retorna o tipo de dados da expressão escalar.

Exemplos de atraso do servidor SQL

Vejamos um exemplo prático para entender melhor como usar a função de atraso. Vamos começar adicionando dados de amostra como mostrado:

Criar banco de dados SampledB;
IR
Use sampledb;
Crie a tabela LAG_FUNC (
Id int não identidade nula (1,1) Chave primária,
DBNAME VARCHAR (50),
paradigma varchar (50),
);
Insira em lag_func (dbname, paradigma)
Valores ('mysql', 'relacional'),
('MongoDB', 'documento'),
('Memcached', 'Store de valor-chave'),
('Etcd', 'armazenamento de valor-chave'),
('Apache Cassandra', 'Wide Coluna'),
('Couchdb', 'documento'),
('PostGresql', 'relacional'),
('SQL Server', 'relacional'),
('neo4j', 'gráfico'),
('Elasticsearch', 'texto completo');
Selecione * de lag_func;

O conjunto de consultas acima deve retornar dados como:

Execute a função de atraso na coluna DBName, como mostrado na consulta de exemplo abaixo:

Selecione *, LAG (dbname, 1) sobre (Order by dbname) como anterior_db de lag_func;

A consulta acima retorna uma saída como:

Observe que a primeira linha contém um valor nulo, pois não tem um valor anterior.

Exemplo 2:

Em vez de obter um valor nulo em que a linha não contém uma linha anterior, podemos definir um valor padrão, conforme mostrado na consulta de exemplo abaixo:

Selecione DBName, Lag (DBName, 1, 'N/A')
Over (Order by DBName) como anterior_DB
De lag_func;

A consulta acima retorna uma saída semelhante à acima. No entanto, em vez de nulo, obtemos a string especificada.

Exemplo 3: Valor de deslocamento personalizado

Também podemos buscar os valores em um valor de deslocamento personalizado. Por exemplo, para obter o valor de três linhas anteriores, podemos usar a consulta:

Selecione DBName, Lag (DBName, 3, 'N/A')
Over (Order by DBName) como anterior_DB
De lag_func;

O código de exemplo acima deve retornar o resultado como:

Aqui, as três primeiras colunas são nulas, pois os valores de deslocamento vão além do escopo das linhas disponíveis.

Exemplo 4: Partição por

Podemos criar partições lógicas de dados relacionados usando a cláusula de partição por. Podemos então aplicar a função de atraso a cada partição.

Considere o exemplo abaixo:

Selecione DBName, Paradigm, Lag (DBName, 1, 'N/A')
Over (Partition by Paradigm Order by DBName) como anterior_db
De lag_func;

A consulta acima retorna um exemplo de consulta como:

A consulta cria 6 partições com base no paradigma no resultado acima. Em cada partição, a função de atraso busca a linha anterior.

Conclusão

Este artigo ensinou a você como usar a função de atraso do SQL Server para recuperar a linha anterior de um conjunto resultante.

Obrigado pela leitura!