postgresql - Postgres 每个匹配条件选择一条记录
问题描述
我在尝试每个匹配条件只获取一条记录时遇到一些问题..
假设我有包含以下列的Certifications表:Id、EmployeeId、DepartmentId、CertificationTitle、PassedDate
一名员工在此表中可以有不止一条记录,但我只需要为每位员工获取一条记录(基于最新的 PassedDate)
SELECT Id, EmployeeId, CertificationTitle
FROM certifications c
ORDER BY EmployeeId, PassedDate DESC
从这个选择中,我需要以某种方式只获取每个 EmployeeId 的第一条记录。有谁知道我如何实现这一目标,这可能吗?Id是表上的主键,所以每条记录都不一样。我需要保留 Select 查询中指定的所有这些列。Group By 对我不起作用,或者我做错了......
解决方案
使用DISTINCT ON
. 这将准确返回组的第一个有序记录。您正确订购是PassedData DESC
为了首先获得最新的记录。的组DISTINCT ON
自然是EmployeeID
:
SELECT DISTINCT ON (EmployeeId),
Id,
EmployeeId,
CertificationTitle
FROM certifications c
ORDER BY EmployeeId, PassedDate DESC