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

上記の分析関数を使用して1行を取得したいと思います。

Column1     Column2              Column3 
1               A             01/01/2012

問題は、Oracleが2行を取得することです。1行はNullで、もう1行は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

これは、グループ内の最初の非 null 値の位置が 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 に答える