J'ai le tableau suivant:
ID NOM HEURE 1 A 0 2 A 3 3 B 1
J'utilise la requête ci-dessous qui produit:
SELECT * FROM `table` GROUP BY `NAME`
ID NOM HEURE 1 A 0 3 B 1
Et je veux utiliser GROUP BY
pour générer un résultat comme celui-ci (tri par remise dans la colonne TIME):
ID NOM HEURE 2 A 3 3 B 1
SELECT NAME, MAX(TIME) as TIME
FROM table
GROUP BY time
ORDER BY time DESC
select * from (select * from table order by TIME DESC) t group by NAME
Essayez cette solution à partir d’ici http://www.cafewebmaster.com/mysql-order-sort-group , elle a pu résoudre mon problème aussi :)
Échantillon:
SELECT * FROM
(
select * from `my_table` order by timestamp desc
) as my_table_tmp
group by catid
order by nid desc
Eh bien, vous devez décider de ce que vous voulez voir dans les champs ID et Heure après le groupe. A titre d'exemple, je sélectionnerai le MAX (ID) et le SUM (heure), puis l'ordre par desc total.
SELECT MAX(id), name, SUM(time) AS totaltime
FROM YourTableName
GROUP BY name
ORDER BY totaltime DESC
J'espère que cela t'aides.
Pour obtenir les lignes avec le temps le plus élevé par groupe, vous pouvez utiliser une auto-jointure.
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;
select id, name, sum(time) from tb1 where id>1 group by name;
le résultat sera:
+------+------+-----------+
| id | name | sum(time) |
+------+------+-----------+
| 2 | A | 3 |
| 3 | B | 1 |
+------+------+-----------+