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, чтобы гарантировать, что все сущности возвращаются, даже если у них еще нет опубликованных результатов?
ОБНОВЛЕНИЕ: Ответ выбран. Всем спасибо!