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

时间:2020-05-07 08:43:09

标签: sql postgresql greatest-n-per-group

我有一个包含一些列的表,其中有两列-joining_dateSELECT 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在结果中出现两次{1}}应该只返回一行。

问题:如何仅从最新的number中检索一个joining_dateDISTINCT是否保证?

1 个答案:

答案 0 :(得分:0)

编辑:我忽略了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以确保只有一个匹配项。

相关问题