在结果集ID ID中找到MAX

时间:2013-12-27 06:42:25

标签: 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

我不知道这是否正确。你能告诉我找出输出的方法是什么。

2 个答案:

答案 0 :(得分:2)

为什么使用PARTITION?我无法在任何地方使用ROW_NUMBER()的结果。

请尝试以下操作:

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

答案 1 :(得分:1)

试试这个:

如果您只想查找TravelID,请使用以下查询:

SELECT A.TravelId, MAX(A.ToStageID) ToStageID
FROM tbl_HR_TravelStageEvent A 
GROUP BY A.TravelId HAVING MAX(A.ToStageID) = 3

如果您想查找表的所有列,请使用以下查询:

SELECT A.* 
FROM tbl_HR_TravelStageEvent A 
INNER JOIN (SELECT A.TravelId, MAX(A.ToStageID) ToStageID
            FROM tbl_HR_TravelStageEvent A 
            GROUP BY A.TravelId HAVING MAX(A.ToStageID) = 3
           ) B ON A.TravelId = B.TravelId AND A.ToStageID = B.ToStageID