25

可能重复:
检索每个组中的最后一条记录

我有一张表,其中包含三个字段和数据。

姓名 , 顶部 , 总计
猫 , 1 , 10
狗 , 2 , 7
猫 , 3 , 20
马 , 4 , 4
猫 , 5 , 10
狗 , 6 , 9

我想Total为 each选择具有最高值的记录Name,所以我的结果应该是这样的:

姓名 , 顶部 , 总计
猫 , 3 , 20
马 , 4 , 4
狗 , 6 , 9

我尝试按名称按总顺序分组,但它给出了按结果分组的最高记录。有人可以指导我吗?

4

3 回答 3

38
select
  Name, Top, Total
from
  sometable
where
  Total = (select max(Total) from sometable i where i.Name = sometable.Name)

或者

select
  Name, Top, Total
from
  sometable
  inner join (
    select max(Total) Total, Name
    from sometable
    group by Name
  ) as max on max.Name = sometable.Name and max.Total = sometable.Total
于 2010-04-17T06:25:36.267 回答
6

你可以尝试类似的东西

SELECT  s.*
FROM    sometable s INNER JOIN
        (
            SELECT  Name,
                    MAX(Total) MTotal
            FROM    sometable
            GROUP BY Name
        ) sMax  ON  s.Name = sMax.Name 
                AND s.Total = sMax.MTotal
于 2010-04-17T06:33:11.030 回答
0

或者使用 Exists 子句,它返回两个表中唯一存在的行

SELECT * from sometable T
where exists
(select 1
from (SELECT nombre, max(total) as total FROM  sometable TT
    GROUP by nombre) TT
where T.name=TT.name
and T.total=TT.total
)
于 2010-04-17T15:05:00.283 回答