首页 > 数据库 > 数据库开发技术 > hive开窗函数-lag和lead函数
什么是 lag() 和 lead() 函数?
lag() 函数的语法如下:
LAG(column, offset[, default])OVER ([PARTITION BY partition_expression, ...] ORDER BY sort_expression [ASC|DESC], ...)
其中:
column:指定要计算的列。offset:指定要向前查找多少行。offset 的默认值为 1。default:当偏移量超过可用行数时,指定要返回的默认值。默认值为 NULL。PARTITION BY:可选项,用于按照指定的表达式进行分区。ORDER BY:必须指定,用于根据指定的表达式排序。
例如,我们有以下表格:
+-------+--------+
| month | amount |
+-------+--------+
| Jan | 10 |
| Feb | 20 |
| Mar | 30 |
| Apr | 40 |
| May | 50 |
+-------+--------+
现在我们可以使用以下查询来计算每个月与前一个月的差异:
SELECTmonth,amount - LAG(amount, 1) OVER (ORDER BY month) AS amount_diffFROM sales;
以上查询将返回以下结果:
+-------+-------------+
| month | amount_diff |
+-------+-------------+
| Jan | NULL |
| Feb | 10 |
| Mar | 10 |
| Apr | 10 |
| May | 10 |
+-------+-------------+
注意,由于第一行没有前一行,因此 amount_diff 列的值为 NULL。
lead() 函数的语法与 lag() 函数类似:
LEAD(column, offset[, default])OVER ([PARTITION BY partition_expression, ...] ORDER BY sort_expression [ASC|DESC], ...)
我们可以使用以下查询来计算每个月与后一个月的差异:
SELECTmonth,LEAD(amount, 1) OVER (ORDER BY month) - amount AS amount_diffFROM sales;
以上查询将返回以下结果:
+-------+-------------+
| month | amount_diff |
+-------+-------------+
| Jan | 10 |
| Feb | 10 |
| Mar | 10 |
| Apr | 10 |
| May | NULL |
+-------+-------------+
注意,由于最后一行没有后一个行,因此 amount_diff 列的值为 NULL。
原文作者:数据仓库技术;如有侵权,请联系管理员删除。