具有“NULL”值的 Oracle SQL Analytics 函数 FirstValue

Posted

技术标签:

【中文标题】具有“NULL”值的 Oracle SQL Analytics 函数 FirstValue【英文标题】:Oracle SQL Analytics Function FirstValue with 'NULL' Values 【发布时间】:2012-07-27 12:37:24 【问题描述】:

我对分析函数 FirstValue 有疑问:(语法:

FIRST_VALUE(TAble1.Column2 IGNORE NULLS) OVER (PARTITION BY Column1 ORDER BY Column3 DESC)

例子:

Column1     Column2              Column3 
1               A             01/01/2012
1               (NULL)        02/01/2012
1               (NULL)        03/01/2012

我想使用上述分析功能检索一行。

Column1     Column2              Column3 
1               A             01/01/2012

问题是 Oracle 检索到 2 行,一行为 Null,另一行为 column2 中的值“A”

你能帮我解决这个问题吗?

最好的问候

【问题讨论】:

输入您的整个查询或相关代码。 【参考方案1】:

这个问题有点老了,但发布答案以防其他人在谷歌上搜索并完全卡住。

这里应该归咎于 Oracle 的默认窗口行为。

地点

range between unbounded preceding and unbounded following

在您的 order by 子句之后

也就是说,

FIRST_VALUE(TAble1.Column2 IGNORE NULLS) OVER (PARTITION BY Column1 ORDER BY Column3 DESC range between unbounded preceding and unbounded following)

【讨论】:

【参考方案2】:

这是因为组中第一个非空值的位置在 column1 和 column2 上不同。

first_value 函数与 distinct 的组合不是此类查询的解决方案。

您可以改用 row_number 函数:

select * from (
    select
      row_number() OVER (PARTITION BY Column1 ORDER BY Column3 DESC) as rnk,
      FIRST_VALUE(TAble1.Column1 IGNORE NULLS) 
          OVER (PARTITION BY Column1 ORDER BY Column3 DESC) as column1,
      FIRST_VALUE(TAble1.Column2 IGNORE NULLS) 
          OVER (PARTITION BY Column1 ORDER BY Column3 DESC) as column2,
    column3
    from your table
)
where rnk = 1

【讨论】:

我想使用函数 firstvalues 编辑问题并输入您的全部选择。结果应该有 3 行,而不是 2 行。 这一定是因为我的查询中有一个“不同”选项。我的选择是选择 DISTINCT TM_TRFATM.SEQGRP, FIRST_VALUE(RF_ADRPST.NUMIDVRIF IGNORE NULLS) OVER (PARTITION BY TM_TRFATM.SEQGRP ORDER BY RF_ADRPST.DATDERMDFADRPST DESC) NUMIDVRIF, FIRST_VALUE(RF_ADRPST.INDDMGALC IGNORE NULLS) OVER (PARTITION BY TM_TRFATM.SEQGRPDER RF_ADRPST.DATDERMDFADRPST DESC) INDDMGALC 来自 REFRIF.TM_TRFATM TM_TRFATM, REFRIF.RF_ADRPST RF_ADRPST where (RF_ADRPST.NUMIDVRIF=TM_TRFATM.NUMIDVRIF) 抱歉,时间太短,无法理解与问题的关系。请根据问题中的示例调整查询。您可以编辑您的问题。

以上是关于具有“NULL”值的 Oracle SQL Analytics 函数 FirstValue的主要内容,如果未能解决你的问题,请参考以下文章

Oracle SQL - 具有 NULL 值的 max()

SQL从具有空值的行数据中选择MIN值

Sql与oracle中null值的区别

SQL:具有 NULL 值的 AVG

在其中一列中具有多个空值的复合唯一键约束

需要帮助修复 Oracle SQL 查询以返回具有最大列值的行