【问题标题】: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 问题。

标签: sql greatest-n-per-group


【解决方案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;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-24
      • 2013-11-24
      • 2011-08-05
      • 1970-01-01
      • 2012-03-19
      相关资源
      最近更新 更多