[英]PostgreSQL: how to get max() of GROUP BY?
我有一个名为history的表,其中包含字段id , lastname , event和date 。
它可以保存在我的办公室工作的人员的事件,例如“进入办公室”,“离开办公室”,“疾病”,“假期”等。
我需要得到每个人的最后一个事件。
这是我尝试过的,但是不起作用:
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
键distinct on
键。
有不存在:
SELECT p.lastname, p.event, p.date
FROM personshistory p
WHERE NOT EXISTS (
SELECT 1 FROM personshistory
WHERE lastname = p.lastname and date > p.date
)
或将您的查询(没有event
列)加入表:
SELECT p.lastname, p.event, p.date
FROM personshistory p INNER JOIN (
SELECT lastname, MAX(date) maxdate
FROM personshistory
GROUP BY lastname
) g on g.lastname = p.lastname and g.maxdate = p.date
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.