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

SQL:按记录分组,然后从每个组中获取最后一条记录?[复制品]

  •  2
  • Naveed  · 技术社区  · 14 年前

    可能重复:
    SQL Server: Only last entry in GROUP BY

    我有一张这样的桌子:

    id| name  | attendence
    1 | Naveed| 1
    2 | Naveed| 1
    3 | Adil  | 1
    4 | Adil  | 1
    

    我使用以下查询:

    SELECT * FROM `test` WHERE `attendence`=1 GROUP BY name
    

    以上查询结果:

    id| name   | attendence
    3 | Adil   | 1
    1 | Naveed | 1
    

    问题:

    上面的结果按名称对行分组,但显示每个组的第一行。我想从每个组中选择最后一行(按ID)。

    例如:

    id| name   | attendence
    2 | Naveed | 1
    4 | Adil   | 1
    

    如何为上述结果编写查询。

    谢谢

    4 回复  |  直到 12 年前
        1
  •  9
  •   Fosco    14 年前
    SELECT a.* 
    FROM test a 
    WHERE a.attendence = 1 
    AND NOT EXISTS (select 1 from test where name = a.name and id > a.id and attendence = 1)
    GROUP BY name 
    

    可能不再需要分组。

        2
  •  4
  •   aib    14 年前
    SELECT MAX("id"), "name" FROM "test" WHERE "attendence" = 1 GROUP BY "name"
    
        3
  •  1
  •   bluish dmajkic    13 年前
    SELECT Name, Max(ID) FROM table WHERE attendance = 1 GROUP BY Name
    
        4
  •  0
  •   Joseph    14 年前

    使用以下查询:

    SELECT * FROM `test` WHERE `attendence`=1 GROUP BY name ORDER BY `id` DESC LIMIT 1
    

    它将只选择符合具有最高ID的条件的行。