我有一个包含一些列的表,其中有两列-joining_date
,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
在结果中出现两次{1}}应该只返回一行。
问题:如何仅从最新的number
中检索一个joining_date
? DISTINCT
是否保证?
答案 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
以确保只有一个匹配项。