0
votes

Le groupe MySQL en ne renvoie pas la première ligne dans une sélection commandée

J'ai un problème de retour des lignes dans une requête commandée / groupée.

J'essaie d'obtenir la dernière ligne de type 2 sur une table, j'ai donc utilisé une commande de premier groupe ultérieur.

exemple Table: xxx

si je fais xxx

Il retourne: xxx

alors si je fais xxx

i obtient: xxx

groupe Par ne pas avoir la première rangée du groupe? Comment puis-je obtenir la dernière ligne comme: xxx

merci !!!


3 commentaires

Ceci est probablement le bug mysql présent dans MySQL avant 5.7.5, où MySQL n'a pas appliqué les colonnes devraient être présentes dans le groupe par clause ou agrégée.


MySQL est notoire pour permettre au groupe par sans agrégats, etc. dans les colonnes de résultat si ce n'est pas en mode strict. Il retournera la rangée du groupe qu'il veut. N'utilisez pas de telles questions.


Merci! Donc, quelle est la bonne façon d'obtenir la dernière ligne de chaque type dans une table?


3 Réponses :


0
votes

1st de tous, au meilleur de ma connaissance, votre requête devrait fonctionner correctement. Peut-être que c'est une question de versions MySQL comme suggérées dans les commentaires

comme pwe Votre question, la solution devrait être d'arriver à la solution qui n'utilise pas groupe par . Du commander par + limite Par exemple: xxx

Dans ce cas, la commande en apporte d'abord la ligne nécessaire, la limite ne fait qu'une ligne à retourner

une autre approche, moins efficace, est par rejoindre gauche + null : xxx

dans cette approche, l'inégalité applique la dernière ligne de TYE non être joint à l'autre table Le filtrage par ces critères extraire la dernière ligne


0 commentaires

0
votes

Pour obtenir la dernière ligne de chaque type

Vous pouvez utiliser non pas existant: xxx


0 commentaires

0
votes

mySQL ne garantit pas l'ordre des lignes en groupe par des colonnes non agrégées. La requête que vous avez écrite ne fonctionnera pas de manière cohérente et produira des valeurs non déterministes.

Pour obtenir les données que vous souhaitez, Vous pouvez effectuer la requête suivante: xxx

Dans votre requête, vous regroupez par type mais essayant d'obtenir toutes les autres colonnes qui ne font pas partie de l'agrégation, il ne fonctionnera donc pas Correctement, et au cas où uniquement_full_group_by Le mode SQL est activé, la requête sera considérée comme invalide.


1 commentaires

Cette solution m'a beaucoup aidé, j'ai apporté des changements dans le choix, car ma vraie table est plus complexe. Merci.