Postgresql:如何为postgres中的相同时间戳选择“媒体”列中的最大值?

Posted

技术标签:

【中文标题】Postgresql:如何为postgres中的相同时间戳选择“媒体”列中的最大值?【英文标题】:Postgres SQL: How to select the highest value in the "media" column for the same time stamp in postgres? 【发布时间】:2020-08-24 06:20:54 【问题描述】:

我通过 DataGrip 程序使用 possql。我有下表:

    timestamp       | Channel |  media
-----------------------------------------
2020-04-29 00:00:00 |   3     |   1.2
2020-04-29 00:00:00 |   4     |    2
2020-04-29 00:00:00 |   5     |    1
2020-04-29 00:10:00 |   3     |    2
2020-04-29 00:10:00 |   4     |   1.5
2020-04-29 00:10:00 |   5     |    3

我想对每个“时间戳”按“媒体”列中的最大值排序,如下:

    timestamp       | Channel |  media
-----------------------------------------
2020-04-29 00:00:00 |   4     |    2
2020-04-29 00:10:00 |   5     |    3

我该怎么做?

我尝试这样做,但没有成功,它在重复原始表格:

SELECT timestamp, max(media), channel
FROM monitoring_aggregate
GROUP BY timestamp, channel
ORDER BY timestamp 

【问题讨论】:

【参考方案1】:

在 Postgres 中,只需使用 distinct on 即可解决此 top-1-per-group 问题:

select distinct on (timestamp) ma.*
from monitoring_aggregate ma
order by timestamp, media desc

【讨论】:

非常感谢您的回复!如果你有 4 列,只选择 3 列并进行相同的排序,就像我会做的那样?

以上是关于Postgresql:如何为postgres中的相同时间戳选择“媒体”列中的最大值?的主要内容,如果未能解决你的问题,请参考以下文章

如何为 5500 万条记录批量更新 postgres 中的单个列

何为PostgreSQL?

Android 中的 postgres JDBC 驱动程序

如何为 PostgreSQL 中的自链接记录设计最佳实践数据结构?

全新安装后如何登录并验证 Postgresql?

如何为 Postgresql 中的所有数据库创建具有只读权限的用户?