Ritardo SQL

Ritardo Sql



La funzione SQL lag() consente di accedere alla riga precedente dalla riga corrente con un offset specifico. In breve, la funzione lag() permette di accedere alla riga precedente da quella corrente. Specificando il valore di offset, è possibile accedere alle righe 1, 2, 3, ecc. precedenti da quella corrente.

È l'opposto della funzione lead() che consente di accedere alle righe successive.







Ritardo SQL()

La sintassi della funzione è la seguente:



LAG(espressione_valore, offset [, predefinito])
SOPRA (
[PARTIZIONE PER espressione_partizione]
ORDER BY sort_expression [ASC | DESC]
);

Di seguito sono riportati gli argomenti supportati:



  • valore_espressione – Specifica il valore restituito dalla riga precedente. L'espressione deve restituire un singolo valore.
  • compensare – Specifica a quante righe indietro rispetto alla riga corrente accedere.
  • predefinito – Imposta il valore predefinito se l'offset non rientra nell'ambito della partizione. Per impostazione predefinita, il valore è impostato su NULL.
  • Partizione per – Specifica come partizionare i dati.
  • Ordinato da – Imposta il formato dell'ordine per le righe in ciascuna partizione.

Impostazione dei dati di esempio

Prima di approfondire il funzionamento della funzione lag(), iniziamo impostando una tabella di base a scopo dimostrativo.





prodotti CREA TAVOLA (
product_id INT CHIAVE PRIMARIA AUTO_INCREMENT,
nome_prodotto VARCHAR(255),
categoria VARCHAR(255),
prezzo DECIMALE(10, 2),
quantità INT,
data_scadenza DATA,
codice a barre BIGINT
);

inserire
in
prodotti (nome_prodotto,
categoria,
prezzo,
quantità,
data di scadenza,
codice a barre)
valori ('Cappello da cuoco 25 cm',
'forno',
24.67,
57,
'09-09-2023',
2854509564204);

inserire
in
prodotti (nome_prodotto,
categoria,
prezzo,
quantità,
data di scadenza,
codice a barre)
valori ('Uova di quaglia - in scatola',
'dispensa',
17:99,
67,
'29-09-2023',
1708039594250);

inserire
in
prodotti (nome_prodotto,
categoria,
prezzo,
quantità,
data di scadenza,
codice a barre)
valori ('Caffè - Egg Nog Capuccino',
'forno',
92,53,
10,
'22-09-2023',
8704051853058);

inserire
in
prodotti (nome_prodotto,
categoria,
prezzo,
quantità,
data di scadenza,
codice a barre)
valori ('Pera - Spinoso',
'forno',
65.29,
48,
'23-08-2023',
5174927442238);

inserire
in
prodotti (nome_prodotto,
categoria,
prezzo,
quantità,
data di scadenza,
codice a barre)
valori ('Pasta - Capelli d'angelo',
'dispensa',
48.38,
59,
'05-08-2023',
8008123704782);

inserire
in
prodotti (nome_prodotto,
categoria,
prezzo,
quantità,
data di scadenza,
codice a barre)
values ('Wine - Prosecco Valdobiaddene',
'produrre',
44.18,
3,
'13-03-2023',
6470981735653);

inserire
in
prodotti (nome_prodotto,
categoria,
prezzo,
quantità,
data di scadenza,
codice a barre)
valori ('Pasticceria - Mini Francese Assortita',
'dispensa',
36,73,
52,
'29-05-2023',
5963886298051);

inserire
in
prodotti (nome_prodotto,
categoria,
prezzo,
quantità,
data di scadenza,
codice a barre)
valori ('Arancia - In scatola, Mandarino',
'produrre',
65,0,
1,
'20/04/2023',
6131761721332);

inserire
in
prodotti (nome_prodotto,
categoria,
prezzo,
quantità,
data di scadenza,
codice a barre)
valori ('Maiale - Spalla',
'produrre',
55,55,
73,
'2023-05-01',
9343592107125);

inserire
in
prodotti (nome_prodotto,
categoria,
prezzo,
quantità,
data di scadenza,
codice a barre)
valori ('Dc Hikiage Hira Huba',
'produrre',
56.29,
53,
'2023-04-14',
3354910667072);

Una volta completata la creazione e la configurazione dei dati, procediamo con la discussione di alcuni esempi.

Esempio 1: utilizzo di base

In questo caso, abbiamo accesso a una tabella “prodotti” che contiene le informazioni sul prodotto. Supponiamo di voler ottenere il codice a barre precedente dalla riga corrente.



Possiamo usare la funzione lag() come segue:

Selezionare
nome del prodotto,
prezzo,
lag(codice a barre) over (partizione per categoria
ordinato da
prezzo asc) come articolo_precedente
da
prodotti p;

Il codice fornito suddivide i dati in base alla categoria. Quindi recupera il codice a barre precedente nella partizione utilizzando la funzione lag().

L'output risultante è il seguente:

Esempio 2: impostazione del valore predefinito

Se non è presente alcuna riga precedente in una colonna specifica (fuori limite), la funzione imposta il valore su NULL come mostrato nell'esempio precedente.

Per impostare un valore predefinito per qualsiasi accesso fuori ambito, possiamo fare quanto segue:

Selezionare
nome del prodotto,
prezzo,
lag(codice a barre, 1, 'N/A') over (partizione per categoria
ordinato da
prezzo asc) come articolo_precedente
da
prodotti p;

Impostiamo il valore predefinito su 'N/A'. Questo dovrebbe sostituire qualsiasi valore fuori limite come mostrato nell'output:

Esempio 3: valore di offset personalizzato

Supponiamo di voler accedere alle due righe precedenti dalla riga corrente. Possiamo farlo impostando il valore di offset su 2.

Una query di esempio è illustrata di seguito:

Selezionare
nome del prodotto,
prezzo,
lag(codice a barre, 2, 'N/A') over (partizione per categoria
ordinato da
prezzo asc) come articolo_precedente
da
prodotti p;

Produzione:

Questa query restituisce le due righe precedenti in ciascuna partizione.

Conclusione

In questo tutorial abbiamo imparato come lavorare con la funzione lag() per ottenere l'elemento precedente dalla riga corrente.