SQL:
select distinct
h.teacher_id,
h.last_updated_at,
c.name
from sometable h
inner join class c on h.teacher_id=c.id
where last_updated_at is not null
order by last_updated_at desc limit 5;
我得到了重复的teacher_id
作为响应。我哪里错了?我想返回上次更新的教师姓名和id。
您可能会看到,有问题的teacher_id
有多个类与之相关。如果您需要每个老师和他们领导的所有类都有一个记录,则可以使用类似STRING_AGG(c.name)
的东西(取决于您的PostgreSQL版本(。或者,您可以用COUNT(c.name)
返回他们领导的类的数量。
在这两种情况下,您都需要GROUP BY
老师的ID和上次更新。
SELECT DISTINCT * FROM ...
返回唯一的行。同一位老师可以出现多次,而其他栏目则不同。
如果希望所选列上的行是唯一的,请使用DISTINCT ON
。类似:
SELECT DISTINCT ON (teacher_id)
h.teacher_id,
, h.last_updated_at
, c.name
FROM ...
ORDER BY teacher_id, last_updated_at DESC
LIMIT 5;
详细说明:
- 选择每个GROUP BY组中的第一行
如果您想要不同的ORDER BY
,请参阅:
- PostgreSQL DISTINCT ON与不同的ORDER BY