SQL Academy · Lektion

Lag/lead med fönsterramar

Kombinera LAG/LEAD med fönsterramar för att beräkna förändringar mellan perioder och upptäcka luckor i tidsserier.

Lektion 2 av 413 steg

Lag/lead med fönsterramar är en gratis lektion i SQL Academy på CoddyKit. Detta är lektion 2 av 4. Ni kan läsa hela lektionen gratis nedan och sedan öva praktiskt i webbläsaren med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt. Den ingår i lärvägen för SQL Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i SQL Academy innehåller totalt 4 lektioner.

Sammanfattning av LAG/LEAD

LAG(col, n) returnerar värdet n rader före den aktuella raden i fönstret. LEAD(col, n) tittar framåt.

SELECT day, revenue,
       LAG(revenue) OVER (ORDER BY day) AS prev_day_revenue
FROM daily_revenue;

LAG med standardvärde

Det tredje argumentet är ett standardvärde när ingen granne finns:

LAG(revenue, 1, 0) OVER (ORDER BY day)
-- Returns 0 instead of NULL for the very first row.

Beräkna differenser

Förändring från dag till dag:

SELECT day, revenue,
       revenue - LAG(revenue, 1, 0) OVER (ORDER BY day) AS delta
FROM daily_revenue;

LAG med flera steg

Jämför med värdet för N dagar sedan — användbart för jämförelser vecka över vecka och år över år:

LAG(revenue, 7) OVER (ORDER BY day)   -- 7 days ago
LAG(revenue, 365) OVER (ORDER BY day) -- 1 year ago

LEAD för prognosplatser

Mönster av typen ”Vilken är nästa händelse?”:

SELECT id, ts,
       LEAD(ts) OVER (PARTITION BY user_id ORDER BY ts) AS next_ts,
       LEAD(ts) OVER (PARTITION BY user_id ORDER BY ts) - ts AS gap_to_next
FROM events;

Mönster per användare

LAG/LEAD tar hänsyn till PARTITION BY:

SELECT user_id, ts, action,
       LAG(action) OVER (PARTITION BY user_id ORDER BY ts) AS prev_action
FROM events;
-- prev_action is the user's previous event, not globally.

Identifiera tillståndsändringar

Kombinera LAG med CASE:

SELECT id, status,
  CASE WHEN status <> LAG(status) OVER (ORDER BY ts) THEN 'changed' ELSE 'same' END
FROM orders;

FIRST_VALUE / LAST_VALUE

Det första eller sista värdet inom ramen:

FIRST_VALUE(status) OVER (PARTITION BY order_id ORDER BY ts) AS first_status
-- The status when the order was first seen.

LAST_VALUE(status) OVER (
  PARTITION BY order_id ORDER BY ts
  ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
) AS final_status

NTH_VALUE

Det N:te värdet i ett sorterat fönster:

NTH_VALUE(revenue, 3) OVER (
  ORDER BY revenue DESC
  ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
)
-- Third-highest revenue value.

Ramfunktioner per grupp

Kombinera LAG med PARTITION BY för grupperade grannar:

SELECT user_id, ts, page,
       LAG(page) OVER (PARTITION BY user_id ORDER BY ts) AS prev_page,
       LEAD(page) OVER (PARTITION BY user_id ORDER BY ts) AS next_page
FROM page_views;

Prestanda

Fönsterfunktioner sorterar en gång per partition. Indexera kolumnerna i (PARTITION BY, ORDER BY) när partitionerna är stora.

Sammanfattning

LAG/LEAD gör jämförelser rad för rad billiga.

  • Standardvärdet undviker NULL
  • Kombinera med CASE för att identifiera tillståndsändringar
  • FIRST_VALUE/LAST_VALUE/NTH_VALUE kompletterar funktionsfamiljen

Snabbkontroll

Ni vill att varje rad ska innehålla gapet (i sekunder) fram till användarens nästa händelse. Vilken funktion ska Ni använda?

Gratis att börja

Lär dig SQL med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
46
Lektioner
183

Vanliga frågor

Är lektionen ”Lag/lead med fönsterramar” gratis?

Ja – hela texten till ”Lag/lead med fönsterramar” kan läsas gratis här på webben. Om Ni vill öva interaktivt med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt och låsa upp resten av kursen i SQL Academy, kan Ni uppgradera till CoddyKit PRO. Kursen i SQL Academy innehåller totalt 4 lektioner.

Vad lär jag mig i ”Lag/lead med fönsterramar”?

Kombinera LAG/LEAD med fönsterramar för att beräkna förändringar mellan perioder och upptäcka luckor i tidsserier. Ni övar på SQL Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig SQL Academy?

Du behöver inga förkunskaper. Utbildningen i SQL Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 2 av 4.

Hur lång tid tar lektionen ”Lag/lead med fönsterramar”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här SQL Academy-lektionen?

Ja. Varje SQL Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. Ramvillkor: ROWS kontra RANGE
  2. Lag/lead med fönsterramar
  3. Indelning i grupper med NTILE och Cume_Dist
  4. Rapporteringsmönster från verkligheten
← Tillbaka till SQL Academy