sql - 按 ID 在结果集中查找最大值

标签 sql sql-server sql-server-2008 select group-by

我有一个具有以下结构的 SQL 表。

TravelStatgeID  TravelId    EventDateTime   Action  FromStageID ToStageID   UserID  Comments
720             1280        38:20.7         Approved    0       1           2030    NULL
721             1280        40:03.2         Approved    1       2           1913    NULL
722             1280        41:24.2         Approved    2       3           2064    NULL
723             1280        45:58.5         Approved    3       4           2229    NULL

该表有数百条记录。我想查找 tostageid=3 的最大值的记录。我写了一个这样的查询:

SELECT 
    ABC.TravelId,
    MAX(ABC.ToStageID)'STAGE'
FROM(
    SELECT 
        ROW_NUMBER()OVER(PARTITION BY TravelId ORDER BY TravelId)'RN',
        * 
    FROM tbl_HR_TravelStageEvent 
)ABC
GROUP BY ABC.TravelId
HAVING MAX(ABC.ToStageID)=3

我不知道这样是否正确。请告诉我有哪些方法可以找到输出。

最佳答案

为什么使用PARTITION?我看不到您在任何地方使用 ROW_NUMBER() 的结果。

尝试以下操作:

SELECT 
    ABC.TravelId,
    MAX(ABC.ToStageID) 'STAGE'
FROM
    tbl_HR_TravelStageEvent ABC
GROUP BY
    ABC.TravelId
HAVING
    MAX(ABC.ToStageID) = 3

关于sql - 按 ID 在结果集中查找最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20796112/

相关文章:

c# - c#中SQL时间戳的等效类型是什么

sql - CHECK 约束不起作用

sql - PostgreSQL 对同一个表的多个列进行计数

sql - 如果 Column1 不为空,则按 Column1 排序,否则按 Column2 排序

mysql - 对桥实体和多属性实体感到困惑

c# - 为 ASP.NET 成员表结构创建脚本

sql - 有关与 SQL Server 2008 一起使用的 SQL 的良好引用

SQL 自连接和聚合

sql-server - 确定当前正在进行的安全检查 (SQL Server)

sql - 从不断插入的表中选择