Skip to content

适用虚谷数据库版本

v12.9



适用虚谷数据库版本

v12.9


FIRST_VALUE

📄字数 722
👁️阅读量 加载中...

功能描述

获取窗口内排序后的第一个值。

语法格式

sql
FIRST_VALUE(expr) OVER ([analytic_clause])

输入参数

  • expr:列名或表达式,用来指定输入数据;
  • analytic_clause:可选的分析子句,支持分组子句,排序子句以及范围子句,详情见analytic_clause

输出结果

expr参数对应的数据类型,输入参数 exprNULL 时,输出结果为 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         |
+------+-------+-------------+--------+------------+