SQL

LAG / LEAD — Previous and Next Row

admin by @admin ADMIN
Jun 17, 2026
May 31, 2026
Public
0 0 up · 0 down Sign in to vote
Access the row before (`LAG`) or after (`LEAD`) the current one, in the window's order. Perfect for "delta from previous reading", session boundaries, etc.
SQL
Raw
-- Daily revenue + previous day's revenue + % change
SELECT
  day,
  revenue,
  LAG(revenue)  OVER (ORDER BY day) AS prev_day,
  revenue - LAG(revenue) OVER (ORDER BY day) AS delta,
  ROUND(
    100.0 * (revenue - LAG(revenue) OVER (ORDER BY day))
          / NULLIF(LAG(revenue) OVER (ORDER BY day), 0),
    1
  ) AS pct_change
FROM   daily_revenue
ORDER  BY day;

-- Time between consecutive events per user
SELECT
  user_id,
  event_at,
  LAG(event_at) OVER (PARTITION BY user_id ORDER BY event_at) AS prev_event_at,
  event_at - LAG(event_at) OVER (PARTITION BY user_id ORDER BY event_at) AS gap
FROM   events;

-- LEAD with a default value for the last row
SELECT name, score, LEAD(name, 1, '—') OVER (ORDER BY score DESC) AS next_runner_up
FROM   leaderboard;
Tags

Save your own code snippets

Create a free account and build your private vault. Share publicly whenever you want.