LEAD, LAG
Return values for a row at a given position before or after the current row in the partition (before the current row=LAG, after the current row=LEAD). The position is defined as an offset value.
{ LEAD | LAG } (expression [, offset [, default] ])
OVER { window_name | ( [ window_definition ] ) }
Parameters
- offset
The
offset
is an optional integer value or numeric expression. The defaultoffset
is1
.- default
If
offset
is specified, adefault
value may also be specified, and this value must have the same data type as the first argument to the function.This
default
provides a value when the function does not return a LEAD or LAG value for the specifiedoffset
(because no such row exists with respect to the current row). Ifdefault
is not specified, the function returnsnull
.- window_definition
For the full
window_definition
syntax, see Syntax for Window Functions. TheORDER BY
clause is not required for this function. The frame clause, if specified, is ignored.
Examples
For example, use the LEAD function with an offset
of 1 row:
premdb=# select name, city, capacity,
lead(capacity,1) over(partition by city order by name) as lead_cap
from team where city='London' order by 2,1;
name | city | capacity | lead_cap
---------------------+--------+----------+----------
Arsenal | London | 60260 | 27111
Charlton Athletic | London | 27111 | 41663
Chelsea | London | 41663 | 26255
Crystal Palace | London | 26255 | 25700
Fulham | London | 25700 | 18439
Queens Park Rangers | London | 18439 | 36284
Tottenham Hotspur | London | 36284 | 35016
West Ham United | London | 35016 | 26255
Wimbledon | London | 26255 |
(9 rows)
Here is the same query with the LAG function instead of LEAD:
premdb=# select name, city, capacity,
lag(capacity,1) over(partition by city order by name) as lag_cap
from team where city='London' order by 2,1;
name | city | capacity | lag_cap
---------------------+--------+----------+---------
Arsenal | London | 60260 |
Charlton Athletic | London | 27111 | 60260
Chelsea | London | 41663 | 27111
Crystal Palace | London | 26255 | 41663
Fulham | London | 25700 | 26255
Queens Park Rangers | London | 18439 | 25700
Tottenham Hotspur | London | 36284 | 18439
West Ham United | London | 35016 | 36284
Wimbledon | London | 26255 | 35016
(9 rows)
In the following example, there is a lag of 5 rows. A default
lag value of 0
is supplied for rows that would otherwise return null
:
premdb=# select name, city, capacity,
lag(capacity,5,0) over(partition by city order by name) as lag_cap
from team where city='London' order by 2,1;
name | city | capacity | lag_cap
---------------------+--------+----------+---------
Arsenal | London | 60260 | 0
Charlton Athletic | London | 27111 | 0
Chelsea | London | 41663 | 0
Crystal Palace | London | 26255 | 0
Fulham | London | 25700 | 0
Queens Park Rangers | London | 18439 | 60260
Tottenham Hotspur | London | 36284 | 27111
West Ham United | London | 35016 | 41663
Wimbledon | London | 26255 | 26255
(9 rows)
Parent topic:Window Functions