SQL Server Lag -funksjon

SQL Server Lag -funksjon

Lag -funksjonen i SQL Server er en Windows -funksjon introdusert i SQL Server 2012. Denne funksjonen lar deg hente dataene fra tidligere rader i henhold til den spesifiserte forskyvningsverdien. Tenk på etterslepfunksjonen som muligheten til å få tilgang til data fra tidligere rader fra den nåværende raden.

Fra den nåværende raden kan du for eksempel få tilgang til forrige rad, som blir den nåværende raden, og du kan få tilgang til forrige rad, og så videre.

I denne artikkelen lærer vi hvordan du bruker etterslepfunksjonen i SQL Server ved å bruke forskjellige eksempler.

SQL Server Lag () -funksjon

Vi uttrykker syntaks for funksjonen som:

lag (uttrykk, forskyvning [, standard])
Over (
[Partisjon av partisjon_by_ekspression]
ordre_by_claus
)

Funksjonsparametere og returverdi

I syntaks ovenfor har vi følgende parametere:

  1. Uttrykk - en kolonne eller uttrykk som brukes av etterslepfunksjonen for å utføre beregningene. Dette er en nødvendig parameter, og uttrykket må returnere en enkelt verdi.
  2. Offset - En positiv heltallverdi som definerer hvor mange rader tilbake lagfunksjonen vil hente. Hvis ikke spesifisert, er standardverdien satt til 1.
  3. Misligholde - Angir standardverdien som returneres av funksjonen hvis den spesifiserte forskyvningsverdien går utover omfanget av partisjonen. Som standard returnerer funksjonen null.
  4. Partisjon_by_ekspression - et uttrykk som brukes til å lage logiske datapartisjoner. SQL Server vil bruke etterslepfunksjonen på de resulterende partisjonssettene.
  5. Ordre_by_claus - et uttrykk for å definere hvordan radene i de resulterende partisjonene bestilles.

Funksjonen returnerer datatypen til skalaruttrykket.

SQL Server Lag Eksempler

La oss se på et praktisk eksempel for å forstå bedre hvordan vi bruker etterslepfunksjonen. La oss starte med å legge til prøvedata som vist:

Opprette databaseprøveb;

Bruk sampledb;
Lag tabell lag_func (
id int ikke null identitet (1,1) primærnøkkel,
DBNAME VARCHAR (50),
Paradigm varchar (50),
);
Sett inn LAG_FUNC (DBNAME, PARADIGM)
Verdier ('mysql', 'relational'),
('Mongodb', 'Dokument'),
('Memcached', 'Key-Value Store'),
('Etcd', 'nøkkelverdi-butikk'),
('Apache Cassandra', 'bred kolonne'),
('Couchdb', 'Dokument'),
('PostgreSql', 'Relational'),
('SQL Server', 'Relational'),
('Neo4j', 'graf'),
('Elasticsearch', 'fulltekst');
Velg * fra lag_func;

Ovennevnte spørringssett skal returnere data som:

Kjør etterslepfunksjonen på DBName -kolonnen som vist i eksempelforespørselen nedenfor:

Velg *, lag (dbname, 1) over (bestill av dbname) som forrige_db fra lag_func;

Spørringen over returnerer en utdata som:

Legg merke til at den første raden inneholder en nullverdi, da den ikke har en tidligere verdi.

Eksempel 2:

I stedet for å få en nullverdi der raden ikke inneholder en tidligere rad, kan vi angi en standardverdi, som vist i eksemplet på spørringen nedenfor:

Velg DBName, Lag (DBName, 1, 'N/A')
Over (bestill av dbname) som forrige_db
Fra lag_func;

Spørringen over returnerer en lignende utdata som ovenfor. I stedet for null, får vi imidlertid den spesifiserte strengen.

Eksempel 3: Tilpasset forskyvningsverdi

Vi kan også hente verdiene på en tilpasset forskyvningsverdi. For å få verdien av tre tidligere rader, kan vi for eksempel bruke spørringen: for eksempel:

Velg DBName, Lag (DBName, 3, 'N/A')
Over (bestill av dbname) som forrige_db
Fra lag_func;

Eksempelkoden ovenfor skal returnere resultatet som:

Her er de tre første kolonnene null ettersom forskyvningsverdiene går utover de tilgjengelige radens omfang.

Eksempel 4: partisjon av

Vi kan lage logiske partisjoner av relaterte data ved å bruke partisjonen etter klausul. Vi kan deretter bruke etterslepfunksjonen på hver partisjon.

Tenk på eksemplet nedenfor:

Velg DBNAME, PARADIGM, LAG (DBNAME, 1, 'N/A')
Over (partisjon etter paradigmordre av dbname) som forrige_db
Fra lag_func;

Spørringen over returnerer et eksempel på spørringssett som:

Spørringen oppretter 6 partisjoner basert på paradigmet i resultatet ovenfor. På hver partisjon henter etterslepfunksjonen forrige rad.

Konklusjon

Denne artikkelen lærte deg hvordan du bruker SQL Server Lag -funksjonen for å hente forrige rad fra et resulterende sett.

Takk for at du leser!