一尘不染

如何将一个表中的最新行连接到另一个表?

sql

我有看起来像这样的数据:

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也会如何确保所有实体都被返回?

更新:已选择答案。谢谢大家!


阅读 179

收藏
2021-05-05

共1个答案

一尘不染

我这样做:

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;
2021-05-05