选择组内最高记录

时间:2021-02-15 05:13:41

标签: sql greatest-n-per-group

你能告诉我如何在一组记录中选择最高的记录吗?例如,在下表中,我只想获取具有最新日期的记录(粗体)。

<头>
典型 序列 日期
A 1 1900-01-01
A 1 2002-01-06
A 1 2021-02-01
A 2 1900-01-01
A 2 2003-12-01
A 2 2004-12-05
A 2 2021-02-21
A 2 2021-01-06
A 3 2015-05-17
A 3 2017-11-26
A 3 2019-11-10
A 3 2021-01-01

非常感谢!

2 个答案:

答案 0 :(得分:0)

首先用group by SEQ 表,然后将表连接到同一个表并用 ROW_NUMBER() 创建行并按日期排序,然后在输出中显示结果行号为 1 的记录。

WITH resultTable AS (
SELECT 
RT.TYP,
RT.SEQ,
RT.DATE,   
ROW_NUMBER() OVER ( PARTITION BY RT.SEQ 
                         ORDER BY RT.DATE DESC ) AS [ROW NUMBER]
FROM MyTable RT
Inner JOIN 
(
  SELECT SEQ
  FROM MyTable
 GROUP BY SEQ
) LT ON RT.SEQ = LT.SEQ)
select resultTable.TYP,resultTable.SEQ,resultTable.DATE from resultTable
WHERE resultTable.[ROW NUMBER] = 1

答案 1 :(得分:0)

一个简单的窗口函数应该可以做到:

select typ, seq, date
from (
  select typ, seq, date, 
         dense_rank() over (partition by typ, seq order by date desc) as rn
  from the_table
) t
where rn = 1
order by typ, seq;