J'ai un problème compliqué, et je ne suis pas très bon avec MYSQL. J'espère que quelqu'un pourra m'aider.
J'ai 2 tables. Un extrait de ces tableaux:Sélectionnez les valeurs maximales d'une colonne groupée par une colonne différente de 2 tables jointes
- Members_per_year
ID | Member_ID | Business_year_ID | AS_ID
1 ........... 1 ............................ 56 ..... .............. 12
10004 ... 1 ............................ 55 ................... 12
10005 ... 1 ...................... ...... 54 ................... 10002 ... 1 ................ ............ 57 ................... 30
2 ........... 2 .. .......................... 58 ................... 40
3 ........... 3 ............................ 58 ......... .......... 27
- Année
ID | Business_year
54 ...... 2012-2013
55 ...... 2013-2014
56 ...... 2014-2015
57 ...... 2015-2016
58 ...... 2016-2017
Ce que j'essaie de faire est de combiner les deux tables sur Members_per_year. Business_year_ID et les colonnes Year.ID. Après quoi, je veux regrouper les données par Member_ID, donc je récupère 1 ligne par membre. Le hic, c'est que ce devrait être les données avec le plus grand Business_year pour ce membre. J'ai réussi à créer une requête, mais cela ne fonctionne pas correctement. La requête est:
SELECT Member_ID, Business_year_ID, MAX(Year.Business_year), Year.ID AS YearID, AS_ID
FROM Members_per_year
INNER JOIN Year ON Members_per_year.Business_year_ID = Year.ID
GROUP BY Member_ID
Et il retourne:
MEMBER_ID | Business_year_ID | MAX (Year.Business_year) | YearID | AS_ID
1 ........................... 56 .................. ............. 2015-2016 .................... 56 .......... 12
2 ........................... 58 ..................... .......... 2016-2017 .................... 58 .......... 40
3 .. ......................... 58 ........................ ....... 2016-2017 .................... 58 .......... 27
Il renvoie le bon max Business_year, mais les Business_year_ID et YearID associés sont incorrects. Fondamentalement, il sélectionne la première valeur pour le Business_year_ID et le MAX pour Business_year. Pas le Business_year_ID correspondant au MAX (Business_year). Est-ce que quelqu'un a une idée de ce qui se passe et comment le résoudre?
Edit:
Je cherche délibérément la Business_year et non pour le Business_year_ID. Il s'agit d'une mesure de précaution, dans le cas où l'ID supérieur n'est pas égal à une année commerciale supérieure.
Les valeurs retournées pour les expressions non agrégées dans la liste SELECT sont indéterminées si ces expressions Aren 't inclus dans la clause 'GROUP BY'. Nous pouvons demander à MySQL de lancer une erreur (similaire au comportement d'un autre SGBDR) si nous incluons 'ONLY_FULL_GROUP_BY' dans le sql_mode. La valeur renvoyée pour la colonne 'YearID' provient de * une * ligne du groupe. Ce n'est pas nécessairement à partir de la ligne avec la valeur maximale de 'BusinessYear'.) Le comportement documenté ici: https://dev.mysql.com/doc/refman/5.7/en/group-by-handling.html – spencer7593
@ spencer7593 Oui , Je pensais que quelque chose de similaire se passait. C'est un peu ennuyeux de choisir seulement la valeur max, et non la ligne correspondant à la valeur max. – Barna