hivesql 开窗lag()
时间: 2025-06-28 13:10:33 浏览: 6
### HiveSQL 中开窗函数 LAG() 的使用方法
在HiveSQL中,`LAG()` 函数属于窗口函数的一种,主要用于访问当前行之前的一行或多行的数据[^2]。
#### 基本语法
```sql
LAG(column_name, offset, default_value) OVER (
PARTITION BY partition_expression
ORDER BY sort_expression
)
```
- `column_name`: 要获取其滞后值的列名称。
- `offset`: 向前偏移的行数,默认为1。即默认情况下取的是上一行的数据。
- `default_value`: 如果指定的偏移超出了分区范围,则返回此默认值;如果不提供则为NULL。
#### 实际应用案例
假设有一个名为 `sales` 的表,记录了不同日期的商品销售情况:
| date | product_id | sales_amount |
|------------|------------|--------------|
| 2023-09-01 | A | 10 |
| 2023-09-02 | A | 15 |
| 2023-09-03 | A | 20 |
为了查看每一天相对于前一天销售额的变化量,可以这样写查询语句:
```sql
SELECT
date,
product_id,
sales_amount,
LAG(sales_amount, 1) OVER(PARTITION BY product_id ORDER BY date) as prev_sales,
sales_amount - LAG(sales_amount, 1) OVER(PARTITION BY product_id ORDER BY date) as diff_from_prev_day
FROM sales;
```
这段代码会输出如下结果:
| date | product_id | sales_amount | prev_sales | diff_from_prev_day |
|------------|------------|--------------|------------|--------------------|
| 2023-09-01 | A | 10 | NULL | NULL |
| 2023-09-02 | A | 15 | 10 | 5 |
| 2023-09-03 | A | 20 | 15 | 5 |
这里可以看到,对于每一项商品,在按照时间顺序排列的基础上,不仅能够得到当天的具体销量,还能知道相比前一天增加了多少销量。
阅读全文
相关推荐

















