我有一个名为 history 的表,其中包含字段 id ,姓,事件和日期。
它可以保存在我办公室工作的人员的事件,例如“进入办公室”,“离开办公室”,“疾病”,“假期”等。
我需要得到每个人的最后一个事件。
这是我尝试过的方法,但是不起作用:
SELECT lastname, event, max(date)
FROM personshistory
GROUP BY lastname, event;
答案 0 :(得分:2)
您可以使用distinct on
:
select distinct on (lastname) ph.*
from personshistory
order by lastname, date desc;
distinct on
是非常方便的Postgres扩展。它在括号中为表达式的每个值保留一行。特定行由order by
子句确定-基于distinct on
键后面的键。
答案 1 :(得分:0)
不存在:
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