2017-10-02 18 views
0

J'ai un tas de colonnes sql à récupérer. Ceci est mon instruction SQL:Devrait MAX dans le groupe en récupérant toutes les données de ligne

 SELECT b.iposx_model_id, 
      a.mrModel, MAX(a.mrRevision) as mrRevision, a.mrApprovedBy, ... 
     FROM mydb1.tbl_model_revision a 
    INNER JOIN mydb2.model_from_revision_process b 
      ON b.mrModel = a.mrModel 
    WHERE a.mrType = 1 
    GROUP BY a.mrModel 
    ORDER BY b.iposx_model_id ASC 

Sur une certaine colonne mrModel taht je récupérai, ce sont les données que j'interrogation pour:

enter image description here

Dans ma requête, il est dit que je devrait obtenir les données avec le Max mrRevision qui correspond à la troisième rangée.

Cependant, lors de l'exécution de l'instruction sql, j'ai obtenu le mrRevision max qui est 2, provenant de la troisième ligne. Mais les autres données de colonne que je reçois proviennent de la deuxième rangée, un exemple est mrApprovedBy qui est de 1035 au lieu de 10. Pourquoi cela se produit-il?

+0

si elles sont dans la même table, alors il est pas p ossible. – Ravi

+0

'Dans ma requête, il est indiqué que je devrais obtenir les données avec le Max mrRevision qui correspond à la troisième ligne.» - c'est légèrement incorrect. Votre requête renvoie le maximum de 'mrRevision' uniquement. Pour obtenir la ligne qui correspond au maximum 'mrRevision', vous devez le spécifier dans la clause' WHERE'. – user5226582

+0

J'ai oublié de mentionner, l'image est juste une déclaration de sélection d'un mrModel spécifique. Maintenant, je cours le Max (mrRevision), je devrais obtenir toutes les données de la 3ème rangée dans l'image puisqu'elle a la mrRevision la plus élevée, droite? Ai-je tort? –

Répondre

0

Le groupe utilisé par seulement une partie de la colonne non impliquée dans aggegation fonction est clause select est depreacted dans SQL parce que là où le travail produit résultat unpredicatble

Dans la plupart DB et dans la version la plus récente de MySQL ce utilisation du groupe en est pas autorisé

pour obtenir la ligne correspondant à la valeur maximale que vous pouvez utiliser une jointure sur les valeurs qui correspondent au contenu à droite

SELECT 
    b.iposx_model_id 
    , a.mrModel 
    , t.mrRevision 
    , a.mrApprovedBy 
    , ... 
FROM mydb1.tbl_model_revision a 
JOIN ( 
select mrModel, MAX(mrRevision) as mrRevision 
from mydb1.tbl_model_revision 
GROUP BY a.mrModel 
) t on a.mrModel = t.mrModel and a.mrRevision = t.mrRevision 
JOIN mydb2.model_from_revision_process b ON b.mrModel = a.mrModel 
WHERE a.mrType = 1 
ORDER BY b.iposx_model_id ASC 
+0

Je pense que je vous reçois. Donc, Grouper ne devrait être utilisé que sur les colonnes spécifiques exactes dont j'avais besoin pour avoir un groupe par requête. Les autres données appartenant à la même ligne doivent être récupérées en utilisant un JOIN. –

+0

Pouvez-vous formater votre code SQL? Il y a des phrases en double. –

+0

@KaySingian oui. le code a été corrigé par fraise – scaisEdge