ITPub博客

首页 > 数据库 > 国内数据库 > YashanDB FIRST_VALUE函数

YashanDB FIRST_VALUE函数

国内数据库 作者:崖山数据库系统YashanDB 时间:2025-05-08 18:49:37 0 删除 编辑

FIRST_VALUE为 窗口函数,并支持滑动窗口。本函数依据给定的窗口条件计算出窗口数据集合,并返回该集合的第一行记录所对应的 expr的值。如果第一个值为NULL且未指定IGNORE NULLS,则函数返回 NULL。

窗口函数不可嵌套,因此expr为除窗口函数之外的其他通用表达式,expr的数据类型可以是CLOB、BLOB、NCLOB、XMLTYPE、JSON、UDT以外的其他数据类型。

(RESPECT|IGNORE) NULLS

指定expr的空值是否被包括在函数的计算中,缺省为RESPECT NULLS,即如果集合中的第一个值为NULL,函数将返回NULL。

如果指定IGNORE NULLS,则函数返回集合中的第一个非空值,当集合中所有值都为空时,返回NULL。此设置对于数据密集化很有用。

示例

-- area1表中包含如下字段和数据SELECT area_no,area_name,DHQ,employee_count FROM area1;AREA_NO AREA_NAME            DHQ             EMPLOYEE_COUNT------- -------------------- --------------- --------------01      华东               Shanghai                      
02      华西               Chengdu                    30003      华南               Guangzhou                  40004      华北               Beijing                    30005      华中               Wuhan                           
-- 返回按AREA_NO排序的每个窗口中的第一个EMPLOYEE_COUNT,windowing_clause省略时的默认窗口为UNBOUNDED PRECEDIN至CURRENT ROWSELECT FIRST_VALUE(employee_count) OVER(ORDER BY AREA_NO) res FROM area1;
                RES-------------------
               
               
               
               
               -- 返回按AREA_NO排序的每个窗口中的第一个非空EMPLOYEE_COUNT,windowing_clause省略时的默认窗口为UNBOUNDED PRECEDIN至CURRENT ROWSELECT FIRST_VALUE(employee_count IGNORE NULLS) OVER(ORDER BY AREA_NO) res FROM area1;
                RES-------------------
                
                300
                300
                300
                300
Copied!

analytic_clause

窗口函数的通用语法。

在windowing_clause语句中无论指定的是ROWS还是RANGE,FIRST_VALUE都将对参数列进行排序,以保证在指定RANGE的情况下本函数返回值的稳定性(当order_by_clause具有相同排名,则函数返回相同排名下任意一行的值都是合理的,由此产生了返回值的不稳定性 ),但ROWS情况下仍会存在此不稳定性。

进行排序的参数列为:query_partition_clause中的expr 、order_by_clause中的排序列和FIRST_VALUE函数的参数expr。

示例(单机部署)

--finance_info表记录了分年、月、机构的收入情况SELECT year,month,branch,revenue_total FROM finance_info;YEAR  MONTH BRANCH REVENUE_TOTAL 
----- ----- ------ ------------- 2001  01    0201            28882021  01    0201           288882021  01    0101           388882021  02    0101           37778--按年分组,并在每组记录中排名该年收入最高的机构SELECT year,revenue_total,FIRST_VALUE(branch) OVER (PARTITION BY year ORDER BY revenue_total DESC) frFROM finance_info;YEAR  REVENUE_TOTAL FR----- ------------- -------------------- 2001           2888 0201                2021          38888 0101                2021          37778 0101                2021          28888 0101   --每月至今收入最高的机构SELECT year,month,revenue_total,FIRST_VALUE(branch) OVER (ORDER BY revenue_total DESC ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) frFROM finance_info;YEAR  REVENUE_TOTAL FR----- ------------- -------------------- 2021  01            38888 0101                2021  02            37778 0101                2021  01            28888 0101                2001  01             2888 0101     --每月在三个月内收入最高的机构SELECT year,month,revenue_total,FIRST_VALUE(branch) OVER (ORDER BY revenue_total DESC ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING) frFROM finance_info;YEAR  REVENUE_TOTAL FR----- ------------- -------------------- 2021  01            38888 0101                2021  02            37778 0101                2021  01            28888 0101                2001  01             2888 0201


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70028812/viewspace-3083631/ ,如需转载,请注明出处,否则将追究法律责任。

下一篇: YashanDB FLOOR函数
请登录后发表评论 登录
全部评论
崖山数据库系统YashanDB是深圳计算科学研究院完全自主研发设计的新型数据库系统,融入原创理论,支持单机/主备、共享集群、分布式等多种部署方式,覆盖OLTP/HTAP/OLAP交易和分析混合负载场景,为客户提供一站式的企业级融合数据管理解决方案。

注册时间:2023-04-11

  • 博文量
    722
  • 访问量
    639881