0
我試圖創建基於表格的視圖。我想獲得一組現有的tax_id_no
行,每行都有最新的信息。所以我按時間戳降序排列。但是,每個tax_id_no
可以有多行,並不是每行都會有所有的信息。所以我想爲每一列獲得第一個有效的信息。現在我得到了這個:爲PostgreSQL中的多列和不同行選擇第一個非空值
SELECT * FROM
(
SELECT DISTINCT ON (store_id, tax_id_no)
event_id,
event_tstamp,
owner_id,
store_id,
tax_id_no,
first_value(year_built) OVER (ORDER BY year_built IS NULL, event_tstamp) AS year_built, --New
first_value(roof_replaced_year) OVER (ORDER BY roof_replaced_year IS NULL, event_tstamp) AS roof_replaced_year, --New
first_value(number_of_rooms) OVER (ORDER BY number_of_rooms IS NULL, event_tstamp) AS number_of_rooms, --New
FROM MySchema.Event
WHERE tax_id_no IS NOT NULL AND tax_id_no != ''
order by store_id, tax_id_no, event_tstamp DESC
) t1
WHERE owner_id IS NOT NULL OR owner_id != '';
雖然這是獲得每行相同的第一個有效信息。因此,與其讓這樣的結果,這就是我想要的:
event_id event_tstamp owner_id store_id tax_id_no year_built roof_replaced_year number_of_rooms
04 2016-05-12 123 02 12345 1996 2009 6
05 2017-02-02 245 02 23456 1970 1999 8
08 2017-03-03 578 03 34567 2002 2016 10
我得到這個,這都在尋找相同的first_value
列行:
event_id event_tstamp owner_id store_id tax_id_no year_built roof_replaced_year number_of_rooms
04 2016-05-12 123 02 12345 1996 2009 6
05 2017-02-02 245 02 23456 1996 2009 6
08 2017-03-03 578 03 34567 1996 2009 6
是否有可能爲每一行選擇不同的first_value
?我想我可以在同一張表中做多種選擇的連接,但我不確定這會實際給我每行的唯一值,而不是再次遇到同樣的問題。此類查詢的時間也很長,到目前爲止,這些查詢的代價非常昂貴。
通過在窗函數的'順序by'表達的前立即tax_id_no'添加'分區。 – systemjack
@systemjack謝謝,這工作。如果你將它作爲答案發布,我會接受它。 –