【问题标题】:select only rowwith highest id value if there are identical column values如果列值相同,则仅选择 id 值最高的行
【发布时间】:2013-05-05 15:23:50
【问题描述】:

如何从表中选择所有值,如果 name 列的值相同,则只选择 id 值最大的行,所以如果有这样的表:

  id name   age country
 ---+------+---+------- 
   1  bob    24  UK
   2  john   48  USA
   3  janet  72  USSR
   4  bob    96  Ukraine 

它只会选择 id 最高的 'bob',所以结果会返回:

  id name   age country
 ---+------+---+------- 
   2  john   48  USA
   3  janet  72  USSR
   4  bob    96  Ukraine

谢谢。

【问题讨论】:

  • 我想你想要最大的年龄

标签: mysql sql


【解决方案1】:

试试这个查询

select * from table_name where ID in(select MAX(ID) from table_name  group by name)

【讨论】:

    【解决方案2】:

    您可以使用子查询计算每个名称的最大 ID,然后返回与子查询返回的 ID 匹配的所有行:

    SELECT *
    FROM People
    WHERE id IN (SELECT MAX(id) FROM People GROUP BY Name)
    

    请看小提琴here

    【讨论】:

    • +1 你其实不需要名字,WHERE id IN (SELECT MAX(id) FROM People GROUP BY Name) 就可以了
    • @Andomar 哦.. 是的......因为它是一个 ID,它已经是独一无二的......我会更新我的答案,谢谢 :)
    【解决方案3】:

    您可以使用 not exists 子查询过滤掉具有相同名称和更大 id 的行:

    select  *
    from    People p1
    where   not exists
            (
            select  *
            from    People p2
            where   p1.Name = p2.Name
                    and p2.Id > p1.Id
            )
    

    【讨论】:

      【解决方案4】:

      你可以这样做:

      Select Table_1.* from table_1 inner join (
      Select Max(ID) as ID from Table_1 Group by ID) x On Table.Id on x.ID
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-09-11
        • 2017-09-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多