sql >> データベース >  >> RDS >> Oracle

null値を最後のnull以外の量で埋める-OracleSQL

    last_value IGNORE NULLSを使用すると、Oracle10gで正常に機能します。

    select item, year, month, amount, 
           last_value(amount ignore nulls) 
             over(partition by item 
                  order by year, month 
                  rows between unbounded preceding and 1 preceding) from tab;
    

    rows between unbounded preceding and 1 preceding 分析関数のウィンドウを設定します。

    この場合、Oracleは、PARTITION BY(同じ項目)で定義されたグループ内で、先頭(UNBOUNDED PRECEDING)から現在の行-1(1 PRECEDING)までのLAST_VALUEを検索しています

    これは、Oracle10gのLEAD/LAGをIGNORENULLSに置き換える一般的な方法です

    ただし、Oracle 11gを使用している場合は、Gordon Linoffの回答からLAGを使用できます(「nullを無視する」という小さなタイプミスがあります)



    1. MySQL5.0インデックス-一意と非一意

    2. SQLiteはMySQLよりも高速ですか?

    3. SQLSTATE [42000]:構文エラーまたはアクセス違反:1055 SELECTリストの式#3がGROUP BY句に含まれておらず、非集計が含まれています

    4. PL / SQLでスレッドを使用できますか?