我有两个表,事件和版本。一个事件有多个版本。我想执行内部联接并获取每个事件的最后版本。 (原始问题在这里:Join two tables and apply group by, but change sort order)
我已将表格更改为这样。我认为这更有意义。但我处于同样的情况,我不明白如何获取每个事件的最大版本 ID。我想了解解决方案背后的逻辑。请随时向我提供有关表结构的反馈。谢谢!
查询:
SELECT e.id AS event_id,v.*
FROM events.event e
INNER JOIN events.version v
ON (v.event_id = e.id)
GROUP BY v.event_id
事件
Id Updated
1 03/08/18
2 06/06/18
版本
Id Event_id Name Description
7 1 Dinner Dinner Z
8 2 Breakfast Breakfast Y
9 2 Breakfast Breakfast X
最佳答案
假设事件中的最后一个版本具有最大的 ID
值,我们可以尝试以下查询:
SELECT
e.id AS event_id,
v1.*
FROM event e
INNER JOIN version v1
ON e.id = v1.event_id
INNER JOIN
(
SELECT event_id, MAX(id) AS max_id
FROM version
GROUP BY event_id
) v2
ON v1.event_id = v2.event_id AND
v1.id = v2.max_id;
您会注意到上述查询中的第一个连接是您已经在做的事情。我只是向一个新的子查询添加了一个联接,该子查询查找每个版本的最新事件。
关于mysql - 使用 group by 对两个表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49612877/