SQL Fiddle

я есть данные, которые выглядят так:

entities
id         name
1          Apple
2          Orange
3          Banana

Периодически, процесс будет запускаться и давать оценку каждому объекту. Процесс генерирует данные и добавляет их в таблицу результатов следующим образом:

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

Я хочу иметь возможность выбрать все объекты вместе с самым последним записанным счетом для каждого, что приводит к некоторым данным, подобным этому:

entities
id name     score  date_added
1  Apple     15     1/4/09
2  Orange    15     1/4/09
3  Banana    15     1/4/09

Я могу получить данные для одного объекта, используя этот запрос:

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

Но я в растерянности из-за того, как выбрать то же самое для всех сущностей. Возможно, это смотрит мне в лицо?

Большое спасибо, что нашли время.

Спасибо за отличные ответы. Я дам ему несколько дней, чтобы посмотреть, появится ли предпочтительное решение, и я выберу ответ.

ОБНОВЛЕНИЕ: я опробовал несколько из предложенных решений, основная проблема, с которой я сталкиваюсь сейчас, заключается в том, что если у объекта еще нет сгенерированного балла, он не появляется в списке.

Как будет выглядеть SQL, чтобы гарантировать, что все сущности возвращаются, даже если у них еще нет опубликованных результатов?

ОБНОВЛЕНИЕ: Ответ выбран. Всем спасибо!

Ответы на вопрос(7)

Ваш ответ на вопрос