AdvancedWindow Functions
Compare each sale to same day last year
The query
SQL
WITH daily_rev AS (
SELECT
order_date::DATE AS d,
SUM(total) AS revenue
FROM orders WHERE status = 'completed'
GROUP BY order_date::DATE
)
SELECT
d AS date,
revenue,
LAG(revenue, 365) OVER (ORDER BY d) AS same_day_last_year,
ROUND(
(revenue - LAG(revenue, 365) OVER (ORDER BY d))
/ NULLIF(LAG(revenue, 365) OVER (ORDER BY d), 0) * 100, 2
) AS yoy_daily_pct
FROM daily_rev
ORDER BY d DESC;Note
“LAG with offset of 365 fetches same day last year. Works for daily comparisons. For monthly use 12.