首页 > 解决方案 > 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 对我不起作用,或者我做错了......

标签: postgresql

解决方案


使用DISTINCT ON. 这将准确返回组的第一个有序记录。您正确订购是PassedData DESC为了首先获得最新的记录。的组DISTINCT ON自然是EmployeeID

SELECT DISTINCT ON (EmployeeId),
    Id, 
    EmployeeId, 
    CertificationTitle 
FROM certifications c 
ORDER BY EmployeeId, PassedDate DESC

推荐阅读