我在PostgreSQL中有2列表:
- id
- employee_id
在这个表中,有些记录的employee_id重复,但总是唯一的。我需要得到唯一的employee_id与最高的id可能。我想要实现的是基于employee_id的不同查询,具有可能的最高id。因此,如果有2条记录具有相同的employee_id,但其中一条的id高于另一条,那么我想获得具有更高id的记录。
试过这个查询:
SELECT DISTINCT ON (employee_id) id, employee_id
FROM table_name
ORDER BY id DESC;
但是首先order by需要与distinct on具有相同的值,其次在我的情况下它不会工作,因为它会在select distinct之后对记录进行排序。
第二次尝试也没有得到正确的记录:
SELECT *
FROM
(
SELECT DISTINCT ON (employee_id) *
FROM
(
SELECT *
FROM table_name
ORDER BY id DESC
) AS sub
) AS sub2
ORDER BY id DESC;
我将非常感谢你的帮助和提示。
SELECT
DISTINCT ON (employee_id) employee_id,
id
FROM
table_name
ORDER BY
employee_id, id DESC;
您可以使用groub by
和max()
:
select employee_id, max(id)
from table_name
group by employee_id
order by employee_id;