PostgreSQL 9.1.9 を使用しています。
私が取り組んでいるプロジェクトでは、その行が作成されたときにその情報が利用できなかったため、最新のレコードの一部に null 列があります。グループのメンバーに属する行の合計を一覧表示するビューがあります。現時点では、ビューには最新の列の合計が表示され、それらが最新の値である場合は null 値が使用されます。例えば、
table1
group_name | member
-------------------
group1 | Andy
group1 | Bob
table2
name | stat_date | col1 | col2 | col 3
--------------------------------------
Andy | 6/19/13 | null | 1 | 2
Andy | 6/18/13 | 100 | 3 | 5
Bob | 6/19/13 | 50 | 9 | 12
Bob | 6/18/13 | 111 | 31 | 51
-- creating view would be something like this...
create view v_grouped as
select table1.group_name, stat_date,
sum(col1) as col1_sum, sum(col2) as col2_sum, sum(col3) as col3_sum
from table1
join table2 on table1.member = table2.name
group by table1.group_name, table2.stat_date;
現在のビューは次のようになります。
group_name | stat_date | col1_sum | col2_sum | col3_sum
-------------------------------------------------------
group1 | 6/19/13 | 50 | 10 | 14
group2 | 6/18/13 | 211 | 34 | 56
6/19 のデータがないにもかかわらず、50 ではなく、150 が実際のグループの合計をより正確に表しています。だから、私はの出力が欲しい
group_name | stat_date | col1_sum | col2_sum | col3_sum
-------------------------------------------------------
group1 | 6/19/13 | 150 | 10 | 14
group2 | 6/18/13 | 211 | 34 | 56
私はfirst_value()
使用可能な関数としてウィンドウ関数から見てきました。オラクルは、私が望むことを行うと信じているオプションをfirst_value()
サポートしていることがわかりました( http://psoug.org/definition/FIRST_VALUE.htm)。私がリンクしたこのページによると、PL/SQLの機能について:ignore nulls
first_value()
結果セットの最初の値が NULL の場合、IGNORE NULLS を指定しない限り、関数は NULL を返します。IGNORE NULLS パラメータを使用すると、FIRST_VALUE は結果セットで最初に見つかった null 以外の値を返します。(すべての値が null の場合、NULL が返されます。)
構文例: FIRST_VALUE(expression [INGORE NULLS]) OVER (analytic_clause)
しかし、PostgreSQLfirst_value()
はそのようなオプションをサポートしていません。PostgreSqlでこれを行う方法はありますか? 前もって感謝します!