本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
LAG 範圍函數傳回分割區中目前列上方 (之前) 給定位移那一列的值。
語法
LAG (value_expr [, offset ]) [ IGNORE NULLS | RESPECT NULLS ] OVER ( [ PARTITION BY window_partition ] ORDER BY window_ordering )
引數
- value_expr
-
函數運算的目標欄或表達式。
- offset
-
選擇性參數,指定在目前列之前要傳回值的列數。位移可以是常數整數,或評估為整數的表達式。如果您不指定位移,Amazon Redshift 會使用
1
做為預設值。位移0
表示目前列。 - IGNORE NULLS
-
選擇性規格,指出 Amazon Redshift 在決定要使用的列時應該略過 Null 值。如果未列出 IGNORE NULLS,則會包含 Null 值。
注意
您可以使用 NVL 或 COALESCE 表達式,將 Null 值換成另一個值。如需詳細資訊,請參閱NVL 和 COALESCE 函數。
- RESPECT NULLS
-
指出 Amazon Redshift 應該包含 null 值來決定要使用的列。如果您不指定 IGNORE NULLS,則預設支援 RESPECT NULLS。
- OVER
-
指定視窗分割和排序。OVER 子句不能包含視窗框規格。
- PARTITION BY window_partition
-
選擇性引數,針對 OVER 子句中的每一個群組,設定記錄範圍。
- ORDER BY window_ordering
-
排序每一個分割區內的列。
LAG 範圍函數支援有使用任何 Amazon Redshift 資料類型的運算式。傳回類型與 value_expr 的類型相同。
範例
下列範例顯示銷售給買方 ID 為 3 之買方的門票數量,以及買方 3 購買門票的時間。為了比較買方 3 的每次銷售與前次銷售,查詢會傳回每次銷售的前次銷售數量。因為 2008/1/16 之前沒有購買,所以第一個先前銷售數量值為 Null:
select buyerid, saletime, qtysold,
lag(qtysold,1) over (order by buyerid, saletime) as prev_qtysold
from sales where buyerid = 3 order by buyerid, saletime;
buyerid | saletime | qtysold | prev_qtysold
---------+---------------------+---------+--------------
3 | 2008-01-16 01:06:09 | 1 |
3 | 2008-01-28 02:10:01 | 1 | 1
3 | 2008-03-12 10:39:53 | 1 | 1
3 | 2008-03-13 02:56:07 | 1 | 1
3 | 2008-03-29 08:21:39 | 2 | 1
3 | 2008-04-27 02:39:01 | 1 | 2
3 | 2008-08-16 07:04:37 | 2 | 1
3 | 2008-08-22 11:45:26 | 2 | 2
3 | 2008-09-12 09:11:25 | 1 | 2
3 | 2008-10-01 06:22:37 | 1 | 1
3 | 2008-10-20 01:55:51 | 2 | 1
3 | 2008-10-28 01:30:40 | 1 | 2
(12 rows)