我有一个具有以下结构的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
我不知道这是否正确。你能告诉我找出输出的方法是什么。
答案 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