使用

时间:2018-04-02 14:10:12

标签: mysql sorting join group-by sql-order-by

我有两个表,事件和版本。一个事件有很多版本。我想执行内部联接并为每个事件获取最新版本。 (原始问题在这里: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

2 个答案:

答案 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

尝试查询,我认为它工作正常。