MySQL группы и сортировать каждую группу - PullRequest
13 голосов
/ 15 декабря 2010

У меня есть следующая таблица:

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, чтобы получить такой результат (скидка сортируется по столбцу ВРЕМЯ):

ID NAME TIME
2  A    3
3  B    1

Ответы [ 6 ]

19 голосов
/ 15 декабря 2010
SELECT NAME, MAX(TIME) as TIME 
FROM table 
GROUP BY time 
ORDER BY time DESC
7 голосов
/ 08 января 2014
 select * from (select * from table order by TIME DESC) t group by NAME
3 голосов
/ 30 июля 2012

Попробуйте это решение отсюда 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
0 голосов
/ 16 мая 2018

Чтобы получить строки с наибольшим временем на группу, вы можете использовать самостоятельное соединение

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;

Демо

0 голосов
/ 16 мая 2018
select id, name, sum(time) from tb1 where id>1 group by name;

результат возврата будет:

+------+------+-----------+
| id   | name | sum(time) |
+------+------+-----------+
|    2 | A    |         3 |
|    3 | B    |         1 |
+------+------+-----------+
0 голосов
/ 15 декабря 2010

Ну, вам нужно решить, что вы хотите видеть в идентификаторе и в полях времени после группировки по.В качестве примера я выберу МАКС (ID) и СУММУ (время), затем упорядочу по итоговому времени.

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

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...