LAG 範圍函數 - Amazon Redshift

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

LAG 範圍函數

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)