【问题标题】:Coalesce of multiple values group by date in postgres在postgres中按日期合并多个值
【发布时间】:2019-03-19 13:17:38
【问题描述】:

我有一张如下图的表格:

我需要根据 identity_no 选择列,还需要选择按 src_date 分组的非零/非空列值。所以当我查询identity_no时,我想要类似的东西:

我需要一个 postgresql 语句甚至一个函数都可以。我试过合并。但我不能在 src_date 上进行分组。这里 src_date 是一个字符串而不是日期

【问题讨论】:

  • 如果src_date 有不同的非空emaildownload 怎么办?
  • @LaurenzAlbe 任何一个值都可以。在另一个类似的表中,它有一个带有时间戳的列。所以在这种情况下可能是最新的一个会更好。

标签: sql postgresql


【解决方案1】:

使用group bymax()

select scr_date,max(upload) as upload, max(download) as download, identity_no, max(email) as email,
max(phone) as phone, min(id) as id
from tablename
group by scr_date,identity_no

【讨论】:

    【解决方案2】:

    您需要按scr_date 对表进行分组,而其他列需要使用minmax 等方法进行聚合。从您的输出来看,id 似乎是每个组中的最小值。其他列不包含每个组的多个值,因此 minmax 的工作方式相同。但是,您应该考虑其他列是否有每个组的多个值,您希望如何聚合它们。

    select min(id) as id, max(upload) as upload, max(download) as download, max(email) as email, max(phone) as phone, scr_date
    from tbl
    group by scr_date
    

    【讨论】:

    • 如果表有一个名为timestamp的列并且有创建的日期和时间,我们可以为src_date选择最新的值吗?
    • 是的,那么您需要将您的表格按timestamp 分组并在src_data 上调用max 函数。
    猜你喜欢
    • 1970-01-01
    • 2013-03-29
    • 2020-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-16
    • 2018-08-11
    • 2018-02-23
    相关资源
    最近更新 更多