使用 group by 对两个表进行排序
Sort order for two tables using group by
我有两个 table,事件和版本。一个事件有多个版本。我想执行内部联接并为每个事件获取最后一个版本。 (原问题在这里:)
我已将 table 更改为此。我认为这更有意义。但我处于同样的情况,我不明白如何获得每个事件的最大版本 ID。我想了解解决方案背后的逻辑。请随时给我关于 table 结构的反馈。谢谢!
查询:
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;
您会注意到上面查询中的第一个连接是您已经在做的。我只是将一个连接添加到一个新的子查询中,该子查询查找每个版本的最新事件。
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
试试查询,我觉得没问题。
我有两个 table,事件和版本。一个事件有多个版本。我想执行内部联接并为每个事件获取最后一个版本。 (原问题在这里:
我已将 table 更改为此。我认为这更有意义。但我处于同样的情况,我不明白如何获得每个事件的最大版本 ID。我想了解解决方案背后的逻辑。请随时给我关于 table 结构的反馈。谢谢!
查询:
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;
您会注意到上面查询中的第一个连接是您已经在做的。我只是将一个连接添加到一个新的子查询中,该子查询查找每个版本的最新事件。
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
试试查询,我觉得没问题。