Funzione di ritardo del server SQL

Funzione di ritardo del server SQL

La funzione LAG in SQL Server è una funzione Windows introdotta in SQL Server 2012. Questa funzione consente di recuperare i dati delle righe precedenti secondo il valore di offset specificato. Pensa alla funzione LAG come la possibilità di accedere ai dati dalle righe precedenti dalla riga corrente.

Ad esempio, dalla riga corrente, è possibile accedere alla riga precedente, che diventa la riga corrente e puoi accedere alla riga precedente e così via.

In questo articolo, impareremo come utilizzare la funzione LAG in SQL Server utilizzando vari esempi.

Funzione sql server lag ()

Esprimiamo la sintassi della funzione come:

lag (espressione, offset [, default])
SOPRA (
[Partizione di partizione_by_expression]
order_by_clause
)

Parametri della funzione e valore di ritorno

Nella sintassi sopra, abbiamo i seguenti parametri:

  1. Espressione - Una colonna o un'espressione utilizzata dalla funzione LAG per eseguire i calcoli. Questo è un parametro richiesto e l'espressione deve restituire un singolo valore.
  2. Compensare - un valore intero positivo che definisce quante righe indietro la funzione di ritardo recupera. Se non specificato, il valore predefinito è impostato su 1.
  3. Predefinito - Specifica il valore predefinito restituito dalla funzione se il valore di offset specificato va oltre l'ambito della partizione. Per impostazione predefinita, la funzione restituisce null.
  4. Partizione_by_expression - Un'espressione utilizzata per creare partizioni di dati logici. SQL Server applicherà la funzione LAG ai set di partizioni risultanti.
  5. Order_by_clause - un'espressione per definire come vengono ordinate le righe nelle partizioni risultanti.

La funzione restituisce il tipo di dati dell'espressione scalare.

Esempi di ritardo del server SQL

Vediamo un esempio pratico per capire meglio come usare la funzione di ritardo. Iniziamo aggiungendo i dati di esempio come mostrato:

Creare il database SampledB;
ANDARE
Usa SampledB;
Crea table lag_func (
id int non null Identity (1,1) Key primario,
dbname varchar (50),
paradigm varchar (50),
);
Inserisci in lag_func (dbname, paradigm)
Valori ('mysql', 'relazionale'),
('MongoDB', 'documento'),
('Memcached', 'Key-Value Store'),
("Etcd", "negozio di valore chiave"),
('Apache Cassandra', 'Wide Column'),
('CouchDB', 'Documento'),
('PostgreSQL', 'Relational'),
('SQL Server', 'Relational'),
('neo4j', 'grafico'),
("Elasticsearch", "full-text");
Seleziona * da Lag_Func;

Il set di query sopra dovrebbe restituire i dati come:

Esegui la funzione LAG sulla colonna DBName come mostrato nella query di esempio seguente:

Seleziona *, lag (dbname, 1) over (ordine per dbname) come precedente_db da Lag_func;

La query sopra restituisce un output come:

Si noti, la prima riga contiene un valore nullo, in quanto non ha un valore precedente.

Esempio 2:

Invece di ottenere un valore nullo in cui la riga non contiene una riga precedente, possiamo impostare un valore predefinito, come mostrato nella query di esempio di seguito:

Seleziona dbname, lag (dbname, 1, 'n/a')
Over (ordine per dbname) come precedente_db
Da lag_func;

La query sopra restituisce un output simile a quello sopra. Tuttavia, invece di null, otteniamo la stringa specificata.

Esempio 3: valore offset personalizzato

Possiamo anche recuperare i valori su un valore di offset personalizzato. Ad esempio, per ottenere il valore di tre righe precedenti, possiamo usare la query:

Seleziona dbname, lag (dbname, 3, 'n/a')
Over (ordine per dbname) come precedente_db
Da lag_func;

Il codice di esempio sopra dovrebbe restituire il risultato come:

Qui, le prime 3 colonne sono nulle poiché i valori di offset vanno oltre l'ambito delle righe disponibile.

Esempio 4: partizione di

Possiamo creare partizioni logiche di dati correlati utilizzando la partizione per clausola. Possiamo quindi applicare la funzione di ritardo a ciascuna partizione.

Considera l'esempio seguente:

Seleziona dbname, paradigm, lag (dbname, 1, 'n/a')
Over (partizione per paradigma ordine di dbname) come precedente_db
Da lag_func;

La query sopra restituisce una query di esempio impostata come:

La query crea 6 partizioni in base al paradigma nel risultato sopra. Su ogni partizione, la funzione LAG recupera la riga precedente.

Conclusione

Questo articolo ti ha insegnato come utilizzare la funzione LAG SQL Server per recuperare la riga precedente da un set risultante.

Grazie per aver letto!