选择组内的最高记录[重复]

Posted

技术标签:

【中文标题】选择组内的最高记录[重复]【英文标题】:Select highest record within a group [duplicate] 【发布时间】:2021-05-18 01:03:40 【问题描述】:

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

TYP SEQ DATE
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

非常感谢!

【问题讨论】:

请分享您已经尝试过的表名和查询。你用的是什么数据库? 你自己没试过吗?你被困在哪里了?你的 DBMS 是什么?您应该始终使用您正在使用的 DBMS 标记您的 SQL 问题。 【参考方案1】:

首先group bySEQ 的表,然后将表连接到同一个表并创建具有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

【讨论】:

【参考方案2】:

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

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;

【讨论】:

以上是关于选择组内的最高记录[重复]的主要内容,如果未能解决你的问题,请参考以下文章

熊猫:Groupby,循环并添加一小时迭代与组内的条件

如何在 Pig 中动态获取组内的前 N% 记录

对于每条记录,还要为记录选择具有最高值的数据[重复]

如何选择重复的最高记录并创建新表?

希尔排序

数据结构-排序-希尔排序