mysql group by并对每个组进行排序

时间:2010-12-15 09:37:36

标签: mysql sql sorting group-by

我有下表:

ID NAME TIME
1  A    0
2  A    3
3  B    1

我正在使用下面的查询产生:

SELECT * FROM `table` GROUP BY `NAME`
ID NAME TIME
1  A    0
3  B    1

我希望使用GROUP BY生成这样的结果(按TIME列折扣排序):

ID NAME TIME
2  A    3
3  B    1

6 个答案:

答案 0 :(得分:19)

SELECT NAME, MAX(TIME) as TIME 
FROM table 
GROUP BY time 
ORDER BY time DESC

答案 1 :(得分:7)

 select * from (select * from table order by TIME DESC) t group by NAME

答案 2 :(得分:3)

从这里http://www.cafewebmaster.com/mysql-order-sort-group尝试此解决方案,它也能够解决我的问题:)

样品:

SELECT * FROM 

(
select * from `my_table` order by timestamp desc
) as my_table_tmp

group by catid

order by nid desc

答案 3 :(得分:0)

嗯,你必须决定你想在ID和分组后的时间字段中看到什么。作为一个例子,我将选择MAX(ID)和SUM(时间),然后按总时间desc排序。

SELECT MAX(id), name, SUM(time) AS totaltime
FROM YourTableName
GROUP BY name
ORDER BY totaltime DESC

希望这有帮助。

答案 4 :(得分:0)

select id, name, sum(time) from tb1 where id>1 group by name;

返回结果将是:

+------+------+-----------+
| id   | name | sum(time) |
+------+------+-----------+
|    2 | A    |         3 |
|    3 | B    |         1 |
+------+------+-----------+

答案 5 :(得分:0)

要获得每组时间最长的行,您可以使用自联接

select a.*
from demo a 
left join demo b on a.NAME =b.NAME and a.TIME < b.TIME
where b.NAME is null;

OR

select a.*
from demo a 
join (
  select NAME, max(`TIME`) as `TIME`
  from demo
  group by NAME
) b on a.NAME =b.NAME and a.TIME = b.TIME;

Demo

相关问题