Désolé pour le titre ambigu, je ne sais pas comment chercher ou poser cette question.
Supposons que nous ayons le tableau A :
RowID FkId Rank Date
ID1 A 1 2013-3-1
ID2 A 2 2013-3-2
ID3 A 2 2013-3-3
ID4 B 3 2013-3-4
ID5 A 1 2013-3-5
J'ai besoin de créer une vue qui renvoie une ligne pour chaque FkId. La ligne doit correspondre au rang maximum et à la date maximum. Ainsi, pour le FkId "A", la requête renverrait la ligne "ID3".
J'ai pu retourner une seule ligne en utilisant des sous-requêtes ; j'ai d'abord obtenu le MAX(Rank), puis j'ai joint une autre requête qui obtient le MAX(Date) group by FkId & Rank.
SELECT TableA.\*
(Select FkId, MAX(Rank) AS Rank FROM TableA GROUP BY FkId) s1
INNER JOIN (Select FkId, Rank, MAX(Date) AS Date FROM TableA GROUP BY FkId,Rank) s2 ON s1.FkId = s2.FkId AND s1.Rank = s2.Rank
INNER JOIN TableA ON s2.FkId = TableA.FkId AND s2.Rank = TableA.Rank AND s2.Date = TableA.Date
Existe-t-il une requête plus efficace qui permettrait d'obtenir les mêmes résultats ? Merci de votre attention.
Edit : Ajout de l'ID5 depuis la dernière réponse. Si j'essayais un MAX(rang),MAX(Date) GROUP BY FkId normal, alors pour "A", j'obtiendrais A ; 2 ; 2013-3-5. Ce résultat ne correspondrait pas à un RowId.