Back to articles list Articles Cookbook
8 minutes read

SQL LEAD Function

Get to know the SQL LEAD function, an important function to know for anyone working with SQL in data analysis. Learn through examples how to use this function in practice.

The SQL LEAD function is a very important and useful SQL window function. SQL window functions are essential for doing efficient data analysis. They allow you to work with groups of rows and single rows at the same time. They make writing complex reports easier. They are helpful when preparing rankings, comparing different periods of time, computing running totals, moving averages, the length of the series, and many more.

If you want to learn about SQL window functions, check out our Window Functions course. It includes over 200 detailed exercises and hands-on practice. You can also use our SQL Window Functions Cheat Sheet for quick reference.

What is SQL LEAD Function?

SQL LEAD function is a SQL window function which allows you to access data from a subsequent row and compare it to the current row. This is especially useful when you need to work with sequences of data. For example, if you're looking at sales data, LEAD can show you tomorrow's sales right next to today's, all in one row. This makes it easy to see changes or trends right away.

You can use the LEAD function to:

  • Compare sales figures from one period to the next.
  • Calculate the difference in stock levels from one day to the next.
  • Estimate future values for budgeting or forecasting purposes.

LEAD function is similar to LAG, another SQL window function. The main difference is that LEAD looks at upcoming rows, while LAG looks at previous rows. Use LEAD when you want to see what happens next and LAG when you need to review what happened before. Both are helpful for comparing data with nearby rows.

For examples of using LEAD and LAG functions, and for a comparison of their capabilities, see our guide The LAG Function and the LEAD Function in SQL.

Basic Syntax of SQL LEAD Function

The simplest way to use the LEAD function is with just one argument, which specifies the column you want to look at:

LEAD(column1) OVER (ORDER BY column2)

Here's a breakdown of this syntax:

  • column1: This is the column from which you want to access data in the next row.
  • OVER: This clause is part of window function syntax. You must use it with all window functions. It is used to define the window over which the LEAD function will operate.
  • ORDER BY column2: This clause specifies the order in which the rows should be processed and determines the next row from which to pull data. ORDER BY clause is mandatory for LEAD.

This syntax will get the value from the specified column (column1) in the next row, based on the ordering (ORDER BY column2) defined. If there is no next row, the function will return NULL.

Example 1: Basic Usage of SQL LEAD Function

Let’s see a basic example of using the LEAD function. Suppose you have a table named production_schedule columns for the date and the quantity of products required:

production_datequantity_required
2024-04-01 150
2024-04-02 180
2024-04-03 200

If you want to know the quantity required for the next day, you use the LEAD function like this:

SELECT production_date, quantity_required, LEAD(quantity_required) OVER (ORDER BY production_date) AS next_day_quantity FROM production_schedule;

This query will add a column showing the next day's quantity requirements alongside today's.

production_date quantity_required next_day_quantity
2024-04-01 150 180
2024-04-02 180 200
2024-04-03 200 null

In our query OVER(ORDER BY production_date) orders the rows by production date. The LEAD function looks at the next row after the current row, and takes the quantity_required value from it. The next row after 2024-04-01 is the row for 2024-04-02. The quantity required for 2024-04-02 is 180, and this is what LEAD returns. If there is no next row, the LEAD function returns NULL: there is no next row for 2024-04-03, so next_day_quantity for it is NULL.

LEAD - example

Syntax of LEAD Function Continued: Optional Parameters Offset and Default

The full syntax of the LEAD function takes two more optional arguments, offset and default. They offer more control over the behavior of LEAD.

LEAD(column1, offset, default) OVER (... ORDER BY column2)

Here's a breakdown of this syntax:

  • column1: This is the column from which you want to access data in a subsequent row.
  • offset: This optional integer argument specifies how many rows ahead of the current row you want to look at. If you omit this parameter, it defaults to 1, so it will fetch the data from the next row.
  • default: This optional argument provides a default value that the function will return if the specified offset exceeds the bounds of the result set. If omitted, the default return value is NULL.
  • OVER: This keyword introduces the window specification, defining how the rows are grouped and ordered for the purpose of LEAD.
  • ORDER BY column2: This clause specifies the order in which the rows are processed. It determines the "next" row from which to pull data for each row in the current query's result set.

Example 2: Offset and Default Arguments

Let’s see offset and default in an example. Using the same production_schedule table, suppose you want to see the quantity required not just for the next day, but two days ahead, and you want to avoid NULL values by using 0 instead:

SELECT
  production_date,
  quantity_required,
  LEAD(quantity_required, 2, 0) OVER (ORDER BY production_date) AS two_days_later_quantity
FROM
  production_schedule;
production_date quantity_required two_days_later_quantity
2024-04-01 150 200
2024-04-02 180 0
2024-04-03 200 0

Here, you give 2 as an offset argument. This tells the LEAD function to look two rows ahead, instead of the next row. You also give 0 as the default argument. This makes the LEAD function to display 0 instead of NULL when there is no subsequent row to pull data from.

LEAD - example 2

Example 3: LEAD Function with PARTITION BY

Obviously, you can use full window functions syntax with the LEAD function. For example, you can combine it with PARTITION BY. Suppose your production_schedule table contains data about multiple products. You want to forecast separately for each product.

production_date product_id quantity_required
2024-04-01101150
2024-04-02101180
2024-04-03101200
2024-04-0110290
2024-04-02102110
2024-04-03102120

You can partition your data in OVER(), like this:

SELECT
  production_date,
  product_id,
  quantity_required,
  LEAD(quantity_required) OVER (PARTITION BY product_id ORDER BY production_date) AS next_day_quantity
FROM
  production_schedule;

This query gives you the next day’s production requirements for each product, keeping the calculations separate for each product_id.

production_date product_id quantity_required next_day_quantity
2024-04-01 101 150 180
2024-04-02 101 180 200
2024-04-03 101 200 null
2024-04-01 102 90 110
2024-04-02 102 110 120
2024-04-03 102 120 null

Practical Examples of LEAD Function

In this section, we'll look at practical examples of using the LEAD function in real-world situations. The LEAD function is particularly useful in fields such as sales analysis, inventory management and production scheduling.

Practical Example 1: Planning Flour Orders for Bakery Production

Scenario: A bakery needs to plan how much flour to order each for bread production. It is important to have enough ingredients without overstocking. The data about planned bread production is stored in the table daily_bread_production.

production_date batches_planned
2024-04-01 20
2024-04-02 25
2024-04-03 30

We know that each batch needs 2 kg of flour. We want to find out the flour demand for today and tomorrow. Here’s the query we could use:

SELECT
  production_date,
  batches_planned * 2 AS flour_needed_today_kg,
  LEAD(batches_planned * 2, 1, 0) OVER (ORDER BY production_date) AS flour_needed_tomorrow_kg
FROM
  daily_bread_production;

The query calculates the amount of flour needed for the current day and the requirement for the next day using the LEAD function.

Here’s the result of the query:

production_date flour_needed_today_kg flour_needed_tomorrow_kg
2024-04-01 40 50
2024-04-02 50 60
2024-04-03 60 null

Of course, this is a simplified example, but you can easily imagine how this type of query could be used in a real-world setting to forecast resources needed based on the planned production schedule.

Practical Example 2: Difference Between Two Rows

Scenario: In a financial analysis setting, the LEAD (or LAG) function is used to calculate the change in sales from one day to the next. The data about daily sales is stored in the table daily_sales.

sales_date total_sales
2024-04-01 100
2024-04-02 110
2024-04-03 90
2024-04-04 150

This query will compute the next day sales, the increase from today’s sales to the next day sales, and the percentage growth day to day:

SELECT
  sales_date,
  total_sales,
  LEAD(total_sales) OVER (ORDER BY sales_date) AS next_day_sales,
  LEAD(total_sales) OVER (ORDER BY sales_date) - total_sales AS increase,
  ROUND(((LEAD(total_sales) OVER (ORDER BY sales_date) - total_sales) / total_sales) * 100, 1) AS percentage_growth
FROM
  daily_sales;

This query uses LEAD to find the next day's sales. It then uses LEAD and the current day’s value to calculate the increase. Finally, it uses LEAD and today's sales to calculate the daily percentage growth.

Here’s the result:

sales_date total_sales next_day_sales increase percentage_growth
2024-04-01 100 110 10 10.0
2024-04-02 110 90 -20 -18.2
2024-04-03 90 150 60 66.7
2024-04-04 150 null null null

For more examples and detailed usage of window functions, check out the article SQL Window Functions Examples, which provides a broader perspective and additional scenarios. This resource can help deepen your understanding and enhance your ability to implement SQL window functions effectively.

Conclusion and Further Resources

We've explored the SQL LEAD function, a powerful SQL window function that allows analysts to look at subsequent rows within their data sets. We have discussed the basic syntax of the LEAD function and we have shown its application in various scenarios such as sales trends, inventory management, and production scheduling.

For those just getting started with window functions, I recommend our Window Functions course. It is an interactive, hands-on training program designed to familiarize you with the full syntax and applications of SQL window functions. It includes 218 practical exercises that will help you master the details of SQL window functions.

If you are looking for SQL window functions practice to solidify your understanding, our Window Functions Practice Set offers 100 practical exercises that will challenge and consolidate your knowledge. Additionally, our article SQL Window Functions Practice Exercises provides a set of exercises selected from our courses to test your window functions skills and give you a foretaste of what our courses are like.