TROUVER MAX DANS UN RÉSULTAT ENSEMBLE GROUPE PAR ID

J'ai une table SQL avec la structure suivante.

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 

Cette table a des centaines d'loggings. Je veux find les loggings qui ont maximum de tostageid = 3. J'ai écrit une requête comme ceci:

 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 

Je ne sais pas si c'est la bonne façon ou non. Pouvez-vous s'il vous plaît me donner quels sont les moyens de find la sortie.

Pourquoi utilisez-vous PARTITION ? Je ne peux pas vous voir en utilisant les résultats de ROW_NUMBER() n'importe où.

Essayez de suivre:

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

Essaye ça:

Si vous voulez juste find TravelID, utilisez la requête ci-dessous:

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

Et si vous voulez find toutes les colonnes de la table, utilisez la requête ci-dessous:

 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