1

我对分析函数 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”

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

此致

4

2 回答 2

2

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

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)

于 2014-09-10T01:13:21.487 回答
1

发生这种情况是因为组中第一个非空值的位置在 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
于 2012-07-27T12:45:35.153 回答