LAG
Returns a value from a previous row within the partition of a result set.
See also: LEAD.
Syntax
LAG ( expr [, offset ])
OVER (
[ PARTITION BY partition_expr [, ...] ]
[ ORDER BY order [ ASC | DESC ] [, ...]]
)
offset ::= integer
Arguments
Parameter |
Description |
|---|---|
|
Any value expression |
|
Specifies the offset of rows to scan back. If not specified, defaults to 1. |
Returns
Same type as expr.
Notes
offsetis evaluated with respect to the current row. If not specified,offsetdefaults to 1.If there is no previous row (calculated against the current row),
LAGreturnsNULL.
Examples
For these examples, assume a table named nba, with the following structure:
CREATE TABLE nba
(
"Name" text(40),
"Team" text(40),
"Number" tinyint,
"Position" text(2),
"Age" tinyint,
"Height" text(4),
"Weight" real,
"College" text(40),
"Salary" float
);
Here’s a peek at the table contents (Download nba.csv):
Name |
Team |
Number |
Position |
Age |
Height |
Weight |
College |
Salary |
|---|---|---|---|---|---|---|---|---|
Avery Bradley |
Boston Celtics |
0.0 |
PG |
25.0 |
6-2 |
180.0 |
Texas |
7730337.0 |
Jae Crowder |
Boston Celtics |
99.0 |
SF |
25.0 |
6-6 |
235.0 |
Marquette |
6796117.0 |
John Holland |
Boston Celtics |
30.0 |
SG |
27.0 |
6-5 |
205.0 |
Boston University |
|
R.J. Hunter |
Boston Celtics |
28.0 |
SG |
22.0 |
6-5 |
185.0 |
Georgia State |
1148640.0 |
Jonas Jerebko |
Boston Celtics |
8.0 |
PF |
29.0 |
6-10 |
231.0 |
5000000.0 |
|
Amir Johnson |
Boston Celtics |
90.0 |
PF |
29.0 |
6-9 |
240.0 |
12000000.0 |
|
Jordan Mickey |
Boston Celtics |
55.0 |
PF |
21.0 |
6-8 |
235.0 |
LSU |
1170960.0 |
Kelly Olynyk |
Boston Celtics |
41.0 |
C |
25.0 |
7-0 |
238.0 |
Gonzaga |
2165160.0 |
Terry Rozier |
Boston Celtics |
12.0 |
PG |
22.0 |
6-2 |
190.0 |
Louisville |
1824360.0 |
Using LAG to access previous rows
This example calculates the salary between two players, starting from the highest salary.
t=> SELECT "Name",
. "Salary",
. LAG("Salary") OVER (ORDER BY "Salary" DESC) AS "Salary - previous",
. LAG("Salary",1) OVER (ORDER BY "Salary" DESC) - "Salary" AS "Salary - diff"
. -- LAG("Salary",1) is equivalent to LAG("Salary")
. FROM nba
. LIMIT 11 ;
Name | Salary | Salary - previous | Salary - diff
----------------+----------+-------------------+--------------
Kobe Bryant | 25000000 | |
LeBron James | 22970500 | 25000000 | 2029500
Carmelo Anthony | 22875000 | 22970500 | 95500
Dwight Howard | 22359364 | 22875000 | 515636
Chris Bosh | 22192730 | 22359364 | 166634
Chris Paul | 21468695 | 22192730 | 724035
Kevin Durant | 20158622 | 21468695 | 1310073
Derrick Rose | 20093064 | 20158622 | 65558
Dwyane Wade | 20000000 | 20093064 | 93064
Brook Lopez | 19689000 | 20000000 | 311000
DeAndre Jordan | 19689000 | 19689000 | 0