SQL - 按每条记录的最新日期选择记录

SQL - Selecting records by the newest date for each record

我有一个包含一些列的 table,其中有两个 - numberjoining_date
我要select的是最新加入日期和匹配号码。我创建了以下脚本:

SELECT ac.number, ac.joining_date
FROM accounts ac
         INNER JOIN (
    SELECT number, MAX(joining_date) as maxDate FROM accounts GROUP BY number
) iac ON ac.number = iac.number AND ac.joining_date = iac.maxDate;

看起来不错,但是,我注意到当 joining_date 相等时,即 2020-04-02 10:17:00.000000 对于多个记录, number 在结果中出现两次,即使MAX 应该 return 只有一行。

问题: 如何只检索最新的joining_date中的一个numberDISTINCT 能保证吗?

编辑:我忽略了 postgres 标签,导致我的回答不是很有用。

原回答:

有几个选项,我一般用CROSS APPLY:

SELECT ac.number, ac.joining_date
FROM accounts ac
CROSS APPLY (SELECT TOP 1 a.number, a.joining_date 
             FROM accounts a 
             WHERE a.number = ac.number AND a.joining_date = ac.joining_date
             ORDERBY a.joining_date DESC) iac

另一种选择是在子查询中使用 Row_Number() OVER (PARTITION BY a.number ORDER BY a.joining_date DESC) as rownum,同时还添加 WHERE rownum=1 以确保只有一个匹配项。

使用 DISTINCT ON 子句:

SELECT DISTINCT ON(number) number, joining_date
FROM accounts
ORDER BY number, joining_date DESC