SQL Lag

Sql Lag



La funció SQL lag() us permet accedir a la fila anterior des de la fila actual amb un desplaçament específic. En resum, la funció lag() permet accedir a la fila anterior des de l'actual. Si especifiqueu el valor de compensació, podeu accedir a les files anteriors 1, 2, 3, etc. des de l'actual.

És el contrari de la funció lead() que us permet accedir a les files posteriors.







SQL Lag()

La sintaxi de la funció és la següent:



LAG(expressió_valor, desplaçament [, predeterminat])
ACABAT (
[PARTICIÓ PER expressió_partició]
ORDENA PER expressió_ordenar [ASC | DESC]
);

Els arguments recolzats són els següents:



  • expressió_valor – Especifica el valor de retorn de la fila anterior. L'expressió s'ha d'avaluar en un sol valor.
  • compensació – Especifica quantes files cap enrere de la fila actual a accedir.
  • per defecte – Estableix el valor per defecte si el desplaçament està fora de l'abast de la partició. Per defecte, el valor s'estableix en NULL.
  • Partició per – Especifica com particionar les dades.
  • Demanat per – Estableix el format d'ordre de les files de cada partició.

Configuració de dades de mostra

Abans de submergir-nos en el funcionament de la funció lag(), comencem configurant una taula bàsica amb finalitats de demostració.





productes CREATE TABLE (
product_id INT PRIMARY KEY AUTO_INCREMENT,
nom_producte VARCHAR(255),
categoria VARCHAR(255),
preu DECIMAL(10, 2),
quantitat INT,
data_caducitat DATE,
codi de barres BIGINT
);

inserir
a
productes (nom_producte,
categoria,
preu,
quantitat,
data de caducitat,
codi de barres)
valors ('Barret de xef 25 cm',
'fleca',
24.67,
57,
'2023-09-09',
2854509564204);

inserir
a
productes (nom_producte,
categoria,
preu,
quantitat,
data de caducitat,
codi de barres)
valors ('Ous de guatlla - Enllauna',
'rebost',
17.99,
67,
'2023-09-29',
1708039594250);

inserir
a
productes (nom_producte,
categoria,
preu,
quantitat,
data de caducitat,
codi de barres)
valors ('Cafè - Capuccino d'ou',
'fleca',
92.53,
10,
'2023-09-22',
8704051853058);

inserir
a
productes (nom_producte,
categoria,
preu,
quantitat,
data de caducitat,
codi de barres)
valors ('Pera - Espinosa',
'fleca',
65.29,
48,
'2023-08-23',
5174927442238);

inserir
a
productes (nom_producte,
categoria,
preu,
quantitat,
data de caducitat,
codi de barres)
valors ('Pasta - cabell d'àngel',
'rebost',
48.38,
59,
'2023-08-05',
8008123704782);

inserir
a
productes (nom_producte,
categoria,
preu,
quantitat,
data de caducitat,
codi de barres)
valors ('Vi - Prosecco Valdobiaddene',
'produir',
44.18,
3,
'2023-03-13',
6470981735653);

inserir
a
productes (nom_producte,
categoria,
preu,
quantitat,
data de caducitat,
codi de barres)
valors ('Pastiseria - Assortit mini francès',
'rebost',
36.73,
52,
'2023-05-29',
5963886298051);

inserir
a
productes (nom_producte,
categoria,
preu,
quantitat,
data de caducitat,
codi de barres)
valors ('Taronja - Enllauna, Mandarí',
'produir',
65.0,
1,
'2023-04-20',
6131761721332);

inserir
a
productes (nom_producte,
categoria,
preu,
quantitat,
data de caducitat,
codi de barres)
valors ('Porc - Espatlla',
'produir',
55.55,
73,
'2023-05-01',
9343592107125);

inserir
a
productes (nom_producte,
categoria,
preu,
quantitat,
data de caducitat,
codi de barres)
valors ('Dc Hikiage Hira Huba',
'produir',
56.29,
53,
'2023-04-14',
3354910667072);

Amb la creació i la configuració de dades completades, anem a discutir alguns exemples.

Exemple 1: ús bàsic

En aquest cas, tenim accés a una taula de 'productes' que conté la informació del producte. Suposem que volem obtenir el codi de barres anterior de la fila actual.



Podem utilitzar la funció lag() de la següent manera:

seleccionar
nom del producte,
preu,
lag (codi de barres) sobre (partició per categoria
demanat per
preu asc) com a article_anterior
des de
productes p;

El codi donat divideix les dades en funció de la categoria. A continuació, obté el codi de barres anterior a la partició mitjançant la funció lag().

La sortida resultant és la següent:

Exemple 2: Configuració del valor per defecte

Si no hi ha cap fila anterior en una columna específica (fora de límit), la funció estableix el valor a NULL tal com es mostra a l'exemple anterior.

Per establir un valor predeterminat per a qualsevol accés fora de l'àmbit, podem fer el següent:

seleccionar
nom del producte,
preu,
lag(codi de barres, 1, 'N/A') sobre (partició per categoria
demanat per
preu asc) com a article_anterior
des de
productes p;

Definim el valor per defecte a 'N/A'. Això hauria de substituir qualsevol valor fora de límit tal com es mostra a la sortida:

Exemple 3: valor de compensació personalitzat

Suposem que voleu accedir a les dues files anteriors des de la fila actual. Ho podem fer establint el valor de compensació a 2.

A continuació s'il·lustra un exemple de consulta:

seleccionar
nom del producte,
preu,
lag(codi de barres, 2, 'N/A') sobre (partició per categoria
demanat per
preu asc) com a article_anterior
des de
productes p;

Sortida:

Aquesta consulta retorna les dues files anteriors a cada partició.

Conclusió

En aquest tutorial, hem après a treballar amb la funció lag() per obtenir l'element anterior de la fila actual.