Postgres中字段的合并聚合

4

我正在尝试按照 name 字段进行分组,但是同时要使用其他值的“合并聚合”方式。以下是数据:

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字段的某些值可能为空,我正在尝试获取最近不为空的值。

我知道我不应该依赖CTE的顺序,但目前似乎可以工作。

2个回答

4

我花了一些时间才找到这个,希望能对你有所帮助。如果这不是最好的解决方法,请告诉我:

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" 

我也遇到了同样的问题。最终我得到了和你完全一样的结果,但我讨厌它!我真的很讨厌它。我对数据的可靠性缺乏信任。 - Phish

0

是的,但实际生产用例中我正在寻找多个字段。 - J-DawG

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接