【发布时间】:2010-10-04 14:17:16
【问题描述】:
我的数据如下所示:
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 是什么样的?
更新:已选择答案。谢谢大家!
【问题讨论】:
标签: sql date join greatest-n-per-group