我有看起来像这样的数据:
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也会如何确保所有实体都被返回?
更新:已选择答案。谢谢大家!
我这样做:
SELECT e.*, s1.score, s1.date_added FROM entities e INNER JOIN scores s1 ON (e.id = s1.entity_id) LEFT OUTER JOIN scores s2 ON (e.id = s2.entity_id AND s1.id < s2.id) WHERE s2.id IS NULL;