Je pense qu'il y a un souci dans la définition de vos tables
Si une ruche fait l'objet de zéro à plusieurs mesures et qu'une mesure concerne une et une seule ruche, vous devriez avoir les tables suivantes
RUCHE_RU(
RU_id, RU_nom...)
MESURE_ME(
ME_id, ME_date, ME_poids, ..., RU_id FK)
En ce cas, une solution possible pour connaitre la dernière mesure pour chaque ruche devient la suivante :
1 2 3 4 5 6 7 8 9 10 11 12
| select RU.RU_nom
, RU.RU_id
, ME.ME_date
, ME.ME_poids
from ruche RU
left join mesure ME
on ME.RU_id=RU.RU_id
where not exists
(select 1
from mesure M2
where M2.RU_id=RU.RU_id
and M2.ME_date>ME.ME_date) |
Puisque vous utilisez une vielle version de MySQL, pas de fonction OLAP possible, mais vous pouvez aussi utiliser un MAX ou une jointure OUTER avec test de nullité (cf. mon blog)
Note : DATE est un mot réservé SQL, à éviter pour nommer vos objets base de données. Le fait de préfixer les noms de colonnes par un mnémonique table comme je l'ai fait ci-dessus (ME_date...) permet d'éviter ce genre d'erreur tout en facilitant la recherche sur l'origine des informations

Partager