选择组内的最高记录[重复]
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 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
【讨论】:
【参考方案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;
【讨论】:
以上是关于选择组内的最高记录[重复]的主要内容,如果未能解决你的问题,请参考以下文章