FIRST_VALUE
📄字数 722
👁️阅读量 加载中...
功能描述
获取窗口内排序后的第一个值。
语法格式
sql
FIRST_VALUE(expr) OVER ([analytic_clause])
输入参数
expr
:列名或表达式,用来指定输入数据;analytic_clause
:可选的分析子句,支持分组子句,排序子句以及范围子句,详情见analytic_clause。
输出结果
expr
参数对应的数据类型,输入参数 expr
为 NULL
时,输出结果为 NULL
。
示例
sql
-- 创建测试表tb_sales
-- dept为销售部门,emp为销售人员,sale_dt为销售发生的日期,amount为销售金额
SQL> CREATE TABLE tb_sales (
dept VARCHAR2(20),
emp VARCHAR2(20),
sale_dt DATE,
amount NUMBER
);
-- 填充测试数据
SQL> INSERT INTO tb_sales VALUES ('A','Alice', '2025-01-01', 100),
('A','Bob', '2025-01-05', NULL),
('A','Carol', '2025-01-10', 200),
('B','Dave', '2025-02-01', 50),
('B','Eve', '2025-02-10', NULL),
('B','Frank', '2025-02-20', 150);
-- 查询每个销售部门最早的一笔销售金额
SQL> SELECT dept,
emp,
sale_dt,
amount,
FIRST_VALUE(amount)
OVER ( PARTITION BY dept ORDER BY sale_dt )
AS first_sale
FROM tb_sales
ORDER BY dept, sale_dt FROM dual;
+------+-------+-------------+--------+------------+
| DEPT | EMP | SALE_DT | AMOUNT | FIRST_SALE |
+------+-------+-------------+--------+------------+
| A | Alice | 2025-01-01 | 100 | 100 |
| A | Bob | 2025-01-05 | <NULL> | 100 |
| A | Carol | 2025-01-10 | 200 | 100 |
| B | Dave | 2025-02-01 | 50 | 50 |
| B | Eve | 2025-02-10 | <NULL> | 50 |
| B | Frank | 2025-02-20 | 150 | 50 |
+------+-------+-------------+--------+------------+