J'ai des données qui ressemble à ceci:Comment joindre la ligne la plus récente d'une table à une autre table?
entities
id name
1 Apple
2 Orange
3 Banana
périodiquement, un processus se déroulera et donner un score à chaque entité. Le processus génère les données et l'ajoute à une marque table comme si:
scores
id entity_id score date_added
1 1 10 1/2/09
2 2 10 1/2/09
3 1 15 1/3/09
4 2 10 1/03/09
5 1 15 1/4/09
6 2 15 1/4/09
7 3 22 1/4/09
Je veux être en mesure de sélectionner toutes les entités ainsi que les plus récentes score enregistré pour chaque résultat des données comme celle-ci:
entities
id name score date_added
1 Apple 15 1/4/09
2 Orange 15 1/4/09
3 Banana 15 1/4/09
Je peux obtenir les données pour une seule entité utilisant cette requête:
SELECT entities.*,
scores.score,
scores.date_added
FROM entities
INNER JOIN scores
ON entities.id = scores.entity_id
WHERE entities.id = ?
ORDER BY scores.date_added DESC
LIMIT 1
Mais je suis à une perte pour savoir comment sélectionner les mêmes pour toutes les entités. Peut-être que ça me regarde en face?
Merci beaucoup d'avoir pris le temps.
Merci pour les bonnes réponses. Je vais lui donner quelques jours pour voir si une solution préférée éclabousse alors je vais sélectionner la réponse. MISE À JOUR: J'ai essayé plusieurs des solutions proposées, le principal problème auquel je suis confronté est que si une entité n'a pas encore de score généré, elle n'apparaît pas dans la liste. À quoi ressemblerait le code SQL pour s'assurer que toutes les entités sont renvoyées, même si elles n'ont encore aucun résultat?
MISE À JOUR: Réponse sélectionnée. Merci tout le monde!
Merci Bill, j'ai fini par me contenter de cette solution, mais j'ai remplacé l'INNER JOIN par un LEFT JOIN pour inclure les entités qui n'ont pas encore de scores. – GloryFish
J'aime cette solution, j'utilise aussi LEFT JOIN. Comment recommanderiez-vous de traiter une égalité, dans le cas où il y avait deux scores pour la même entité avec la même date? – russds
@russds, utilisez une autre colonne pour résoudre les liens. –