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.
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 agoLEAD 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_statusNTH_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?
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
- Ramvillkor: ROWS kontra RANGE
- Lag/lead med fönsterramar
- Indelning i grupper med NTILE och Cume_Dist
- Rapporteringsmönster från verkligheten