本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
LEAD 範圍函數傳回分割區中目前列下方 (之後) 給定位移那一列的值。
語法
LEAD (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
-
排序每一個分割區內的列。
LEAD 範圍函數支援有使用任何 Amazon Redshift 資料類型的運算式。傳回類型與 value_expr 的類型相同。
範例
下列範例提供 SALES 資料表中於 2008 年 1 月 1 日和 2008 年 1 月 2 日售出門票之活動的佣金,以及對隨後銷售之門票銷售支付的佣金。下列範例使用 TICKIT 範例資料庫。如需詳細資訊,請參閱範本資料庫。
SELECT eventid, commission, saletime, LEAD(commission, 1) over ( ORDER BY saletime ) AS next_comm
FROM sales
WHERE saletime BETWEEN '2008-01-09 00:00:00' AND '2008-01-10 12:59:59'
LIMIT 10;
+---------+------------+---------------------+-----------+
| eventid | commission | saletime | next_comm |
+---------+------------+---------------------+-----------+
| 1664 | 13.2 | 2008-01-09 01:00:21 | 69.6 |
| 184 | 69.6 | 2008-01-09 01:00:36 | 116.1 |
| 6870 | 116.1 | 2008-01-09 01:02:37 | 11.1 |
| 3718 | 11.1 | 2008-01-09 01:05:19 | 205.5 |
| 6772 | 205.5 | 2008-01-09 01:14:04 | 38.4 |
| 3074 | 38.4 | 2008-01-09 01:26:50 | 209.4 |
| 5254 | 209.4 | 2008-01-09 01:29:16 | 26.4 |
| 3724 | 26.4 | 2008-01-09 01:40:09 | 57.6 |
| 5303 | 57.6 | 2008-01-09 01:40:21 | 51.6 |
| 3678 | 51.6 | 2008-01-09 01:42:54 | 43.8 |
+---------+------------+---------------------+-----------+
下列範例提供 SALES 資料表中事件的共斥差異上限,以及針對相同事件的後續銷售之門票銷售所支付的佣金。此範例示範如何使用 LEAD 搭配 GROUP BY 子句。由於彙總子句中不允許視窗函數,因此此範例使用子查詢。下列範例使用 TICKIT 範例資料庫。如需詳細資訊,請參閱範本資料庫。
SELECT eventid, eventname, max(next_comm_diff) as max_commission_difference
FROM
(
SELECT sales.eventid, eventname, commission - LEAD(commission, 1) over (ORDER BY sales.eventid, saletime) AS next_comm_diff
FROM sales JOIN event ON sales.eventid = event.eventid
)
GROUP BY eventid, eventname
ORDER BY eventid
LIMIT 10
| eventid | eventname | max_commission_difference |
+---------+-----------------------------+---------------------------+
| 1 | Gotterdammerung | 7.95 |
| 2 | Boris Godunov | 227.85 |
| 3 | Salome | 1350.9 |
| 4 | La Cenerentola (Cinderella) | 790.05 |
| 5 | Il Trovatore | 214.05 |
| 6 | L Elisir d Amore | 510.9 |
| 7 | Doctor Atomic | 180.6 |
| 9 | The Fly | 147 |
| 10 | Rigoletto | 186.6 |
+---------+-----------------------------+---------------------------+