Course contentsShow
← Databases & SQL
Lesson 1821 of 1,95317. Analytics and Data PipelinesFree lesson

Mastering Window Functions for Analytics

Use lead, lag, and running totals to calculate comparative trends in time-series data.

Mastering Window Functions for Analytics

In this lesson, you will learn how to leverage LEAD, LAG, and running totals to extract comparative trends directly from your time-series data.

When analyzing data pipelines—especially those involving high-frequency sensor logs or daily financial fact tables—simply looking at an absolute value is rarely enough. To understand performance, you need context: How did today’s metric compare to yesterday’s? What is the cumulative impact of these events over time?

Comparative Trends with LEAD and LAG

The LAG() function allows you to look "back" in your result set to access the value of a previous row, while LEAD() looks "forward." By partitioning by your entity (e.g., a device ID) and ordering by your timestamp, you can calculate period-over-period growth without complex self-joins.

SELECT 
    event_date,
    metric_value,
    LAG(metric_value) OVER (PARTITION BY sensor_id ORDER BY event_date) AS previous_value,
    metric_value - LAG(metric_value) OVER (PARTITION BY sensor_id ORDER BY event_date) AS delta
FROM sensor_readings;

Running Totals for Cumulative Impact

Running totals are essential for identifying the "to-date" trajectory of a metric. By using the SUM() function with a window frame—specifically the ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW clause—you can aggregate values incrementally as you move through your time-series.

SELECT 
    event_date,
    daily_revenue,
    SUM(daily_revenue) OVER (ORDER BY event_date) AS cumulative_revenue
FROM daily_sales_fact;

Why this matters for Pipelines

In an analytical pipeline, these functions are significantly more performant than self-joins because the database engine processes the result set in a single pass. By calculating these trends at the query level, you create a "derived analytical layer" that provides immediate visibility into performance regressions or growth spikes without needing to pre-calculate these values in your ETL process. This keeps your data model lean while maximizing the power of your existing columnar storage.

Key Takeaway: Use LEAD and LAG to pinpoint period-over-period shifts and cumulative SUM windowing to visualize the total trajectory of your time-series data without the overhead of complex joins.