微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Postgres选择所有列,但按一列分组

如何解决Postgres选择所有列,但按一列分组

每当您开始考虑要本地化的GROUP BY时,都应该开始考虑窗口函数

我认为您正在追求这样的事情:

select unit_id, time, diag
from (
    select unit_id, time, diag,
           rank() over (partition by unit_id order by time desc) as rank
    from diagnostics.unit_diag_history
) as dt
where rank = 1

您可能想在ORDER BY中添加一些内容以一贯打破关系,但这并不会改变整体技术。

解决方法

我有一个简单的表,其中包含unit_id oid,时间时间戳,diag bytea。主键是time和unit_id的组合。

该查询的目的是为每个唯一的unit_id获取最新的行(最大的时间戳)。但是,并非总是返回每个具有最新时间的unit_id的行。

我真的只想按unit_id进行分组,但是postgres也使我也使用了diag,因为我正在选择它。

SELECT DISTINCT ON(unit_id) max(time) as time,diag,unit_id 
FROM diagnostics.unit_diag_history  
GROUP BY unit_id,diag

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。