sql - 从具有公共(public)列的记录集中获取最大值

标签 sql sql-server t-sql

根据下面的记录集,我有三列,需要返回每组 PersonId 的最大 CaseId 值。

ID    PersonId  CaseId
66    30        410
1681  30        3508
226   31        958
856   31        2213
1023  31        2400

例如,我想返回一个记录集,例如:

ID    PersonId  CaseId
1681  30        3508
1023  31        2400

如您所见,我始终返回所有 PersonId 集的最大 CaseId。

我尝试了以下方法,但它并不总是返回最大记录:

WITH latestRecord AS
 (
  SELECT  CaseId, PersonId, ID,
    ROW_NUMBER() OVER (PARTITION BY PersonId ORDER BY ID ASC) AS RN
  FROM    Employee
  )
  SELECT  Max(RN),CaseId, PersonId
  FROM    latestRecord
  GROUP BY RN,CaseId, PersonId
  --WHERE   RN > 1
  ORDER BY CaseId

感谢您的帮助!

最佳答案

你几乎是对的:

WITH latestRecord
AS
(
    SELECT  CaseId, 
            PersonId, 
            ID,
            RN=ROW_NUMBER() OVER (PARTITION BY PersonId ORDER BY CaseId DESC) 
    FROM    Employee
)
SELECT  CaseId, 
        PersonId, 
        ID
FROM    latestRecord
WHERE   RN = 1
ORDER BY CaseId

关于sql - 从具有公共(public)列的记录集中获取最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18282329/

相关文章:

mysql - 加入/排序运行缓慢

sql - 对 Hive 表执行验证和检查(可能不是重复的)

sql - 在 SQL Server 中将日期格式转换为 DD/MMM/YYYY 格式

sql - 如何从命令行输入 SQL 查询,并以更简单的格式检索输出

sql - 如何从SQL中选择给定时间间隔之间的数据

sql - SQL Server 索引的 PostgreSQL 模拟(包括列)

PHP/SQL - 如何更新数据库字段

T-SQL 2012,While 循环最大迭代次数?

sql-server - 获取 TransactSql 批处理中的语句数计数

sql - 如何(自动)生成动态查询的更新查询?