繁体   English   中英

PostgreSQL:如何获得GROUP BY的max()?

[英]PostgreSQL: how to get max() of GROUP BY?

我有一个名为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 ondistinct 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM