具有“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的主要内容,如果未能解决你的问题,请参考以下文章