我正在使用PostgreSQL 9.1.9。最近的非空列(帶有「忽略空值」的窗口函數)的總和
在我正在處理的項目中,某些最近的記錄具有空列,因爲創建該行時該信息不可用。我有一個視圖,列出屬於組成員的行的總和。截至目前,該視圖顯示最近列的總和,如果這些列是最近的值,則使用空值。例如,
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
代替50,150將是實際組總是什麼仔細表示,儘管缺乏數據的6/19。所以,我想的
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()
作爲一個可能的功能使用。我發現Oracle的first_value()
支持ignore nulls
選項,我相信它會做我想做的(http://psoug.org/definition/FIRST_VALUE.htm)。根據這一頁我聯繫,關於PL/SQL的first_value()
功能:
如果在結果集中的第一個值是NULL,則除非指定IGNORE NULLS函數返回NULL。 如果使用IGNORE NULLS參數,則FIRST_VALUE將返回結果集中的第一個非空值。 (如果所有 值爲null,則它會返回NULL。)
語法示例:FIRST_VALUE(表達式[則會忽略NULLS])OVER(analytic_clause)
但PostgreSQL的first_value()
不支持這樣的選擇。有沒有辦法在PostgreSql中做到這一點?先謝謝你!
向我們展示sql – digitaljoel
我剛剛包含了與視圖一起使用的sql腳本。謝謝。 –
我不明白解釋。你一直在寫「最近的專欄」。你是否及時添加專欄? 「最近的專欄」是什麼意思? – 2013-07-03 21:07:12