sql - PostgreSQL:如何获取 GROUP BY 的 max()?

标签 sql postgresql

我有一个名为 history 的表,其中包含字段 idlastnameeventdate

它保存在我办公室工作的人的事件,如“进入办公室”、“离开办公室”、“生病”、“假期”等。

我需要获取每个人的最后一个事件。

这是我尝试过的方法,但它不起作用:

SELECT lastname, event, max(date)
FROM personshistory
GROUP BY lastname, event;

最佳答案

您可以使用 distinct on:

select distinct on (lastname) ph.*
from personshistory
order by lastname, date desc;

distinct on 是一个非常方便的 Postgres 扩展。它为括号中表达式的每个值保留一行。特定行由 order by 子句确定——基于 distinct on 键之后的键。

关于sql - PostgreSQL:如何获取 GROUP BY 的 max()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57481900/

相关文章:

mysql - 使用Where和左连接获取空值

sql - 如何找到表中不存在的值?

mysql - 外部连接中的 IF/CASE

postgresql - 在使用 AWS Data Pipeline 从 RDS postgres 数据库导出的 CSV 文件中包含列标题?

sql - 根据 Postgres 中的另一列设置列的值?

postgresql - 无法使用 gorm Postgresql 设置外键

sql - 在 Access 查询中生成运行总和时遇到问题

sql - [ColumnName] 的 DB2 等效项

sql - 查询日期无法正常工作

sql - Postgres 表 : Find duplicates in two columns, 与顺序无关