【问题标题】:Postgres Select one record per matching conditionPostgres 每个匹配条件选择一条记录
【发布时间】:2020-12-01 07:06:08
【问题描述】:

我在尝试每个匹配条件仅获取一条记录时遇到一些问题..

假设我有 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


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-21
      • 2015-08-25
      相关资源
      最近更新 更多