我有下表:
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
答案 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;