mysql - 使用 group by 对两个表进行排序

标签 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

事件

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/

相关文章:

mysql - 使用 mysql 和 node.js 更新 foreach 外部的变量值

php - 使用组检索最新记录

Java 8 基于 list<String> 字符串到列表 <String> 的流排序映射

带条件的 MySQL 唯一索引

mysql - INSERT/UPDATE 查询中的 Atomicity 多个 MySQL 子查询?

java - Collection.sort 的问题

ruby - 如何对具有最高特定值的哈希进行排序?

r - 加入/合并数据框内的两列

MySQL连接int类型和varchar类型的2列

mysql - 选择除最高记录以外的所有记录