代码之家  ›  专栏  ›  技术社区  ›  acanessa

联接两个表并应用分组依据,但更改排序顺序

  •  0
  • acanessa  · 技术社区  · 7 年前

    我有两个表,事件和版本。一个事件有多个版本。我想执行内部联接,并获取每个事件的最新版本。

    查询

    SELECT * FROM events.event e INNER JOIN events.version v ON (e.version_id = v.id) GROUP BY e.event_id
    

    表事件

    id  event_id    version_id  updated
    1   1           7           03/08/2018
    2   2           8           06/06/2018
    3   2           9           02/07/2018
    

    表格版本

    id      name            description         comments
    7       Dinner          A fancy dinner Z    Comment Z
    8       Breakfast       Fancy breakfast Y   Comment Y
    9       Breakfast       Fancy breakfast X   Comment X
    

    实际结果(内部联接和分组依据后)

    id(e) event_id  version_id  id(v) name      description          comments
    1     1         7           7     Dinner    A fancy dinner Z     Z
    2     2         8           8     Breakfast Fancy breakfast Y    Y
    

    期望的结果

    id(e) event_id  version_id  id(v) name      description          comments
    1     1         7           7     Dinner    A fancy dinner Z     Z
    2     2         9           9     Breakfast Fancy breakfast X    X
    

    按排序排序结果是的,但我首先需要的行不在那里。对此,我需要什么查询?谢谢

    1 回复  |  直到 7 年前
        1
  •  0
  •   Paul Spiegel    7 年前

    获取子查询中每个事件的最大版本。然后将表连接到子查询结果:

    SELECT e.*, v.*
    FROM (
        SELECT event_id, MAX(version_id) as version_id
        FROM events.event
        GROUP BY event_id
    ) mx
    JOIN events.event e USING(event_id, version_id)
    JOIN events.version v ON v.id = e.version_id