2017-06-21 133 views
2

我正在嘗試按name字段進行分組,但對於某行可能具有的其他值「合併聚合」。這裏的數據:合併postgres中的字段集合

name  | jurisdiction | db_from 
------------|-----------------|---------------- 
my station NULL    2017-06-21 8:01 
my station my jurisdiction 2017-06-21 8:00 
my station old data   2017-06-21 7:59 

我想拉閘:

name  | jurisdiction  
------------|----------------- 
my station my jurisdiction 

這裏就是我想出來的:

WITH _stations AS (
    SELECT * FROM config.stations x ORDER BY x.db_from DESC 
)SELECT 
    x."name", 
    (array_remove(array_agg(x.jurisdiction), NULL))[1] as jurisdiction 
FROM _stations x 
GROUP BY 
    x."name"; 

一些jurisdiction字段的值可能爲空,我試圖採取最新的不是null。

我知道我不應該依賴於CTE的順序,但它似乎現在工作。

回答

0

我花了一點,如果挖掘找到這個,所以我希望它有幫助。讓我知道這是不是解決問題的最好方法:

SELECT 
    x."name", 
    (array_remove(array_agg(x.jurisdiction ORDER BY x.db_from DESC), NULL))[1] as jurisdiction 
FROM config.stations x 
GROUP BY x."name"