I have data that looks like this:
entities
id name
1 Apple
2 Orange
3 Banana
Periodically, a process will run and give a score to each entity. The process generates the data and adds it to a scores table like so:
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
I want to be able to select all of the entities along with the most recent recorded score for each resulting in some data like this:
entities
id name score date_added
1 Apple 15 1/4/09
2 Orange 15 1/4/09
3 Banana 15 1/4/09
I can get the data for a single entity using this query:
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
But I'm at a loss for how to select the same for all entities. Perhaps it's staring me in the face?
Thank you very kindly for taking the time.
Thanks for the great responses. I'll give it a few days to see if a preferred solution bubbles up then I'll select the answer.
UPDATE: I've tried out several of the proposed solutions, the main issue I'm facing now is that if an entity does not yet have a generated score they don't appear in the list.
What would the SQL look like to ensure that all entities are returned, even if they don't have any score posted yet?
UPDATE: Answer selected. Thanks everyone!
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…