代码之家  ›  专栏  ›  技术社区  ›  Gabe Tucker

按一个表的最大值从SQL表中选择[复制]

  •  0
  • Gabe Tucker  · 技术社区  · 4 年前

    我有一张桌子 userID s、 一张桌子 testID s、 还有一张成对的桌子 用户ID s、 我怎么可能只使用SQL来选择每一个呢 试验的 它对应于?

    中介表:用户ID 1测试ID 1,用户ID 2测试ID 2,用户ID 1测试ID 3,用户ID 2测试ID 7,用户ID 3测试ID 5

    测试表:测试1、测试2、测试3、测试5、测试7

    SELECT userID 1 testID 3, userID 2 testID 7, userID 3 testID 5

    1 回复  |  直到 4 年前
        1
  •  0
  •   GMB    4 年前

    testid .

    join s、 以及一个相关的子查询来过滤预期的测试。

    select ... -- enumerate the columns that you want here
    from mediator m 
    inner join users u on u.userid  = m.userid
    inner join tests t on t.test_id = m.testid
    where m.testid = (
        select max(m1.test_id)
        from mediator m1
        where m1.userid = m.userid
    )
    

    在MySQL8.0中,还可以使用窗口函数:

    select ... 
    from (
        select m.*, 
            row_number() over(partition by userid order by testid desc) rn 
        from mediator m 
    ) m
    inner join users u on u.userid  = m.userid
    inner join tests t on t.test_id = m.testid
    where m.rn = 1