我有两个表,事件和版本。一个事件有很多版本。我想执行内部联接并为每个事件获取最新版本。 (原始问题在这里: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
EVENT
Id Updated
1 03/08/18
2 06/06/18
VERSION
Id Event_id Name Description
7 1 Dinner Dinner Z
8 2 Breakfast Breakfast Y
9 2 Breakfast Breakfast X
答案 0 :(得分:0)
假设事件中的最后一个版本具有最大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;
您会注意到上述查询中的第一个连接是您已经在做的事情。我只是将一个连接添加到一个新的子查询中,该子查询找到每个版本的最新事件。
答案 1 :(得分:0)
select max(v.id),v.*,e.* from EVENT as e inner join VERSION as v on e.Id=v.Event_id group by v. Event_id
尝试查询,我认为它工作正常。