Ich habe folgende Tabelle:
ID NAME TIME 1 A 0 2 A 3 3 B 1
Ich verwende die folgende Abfrage, die produziert:
SELECT * FROM `table` GROUP BY `NAME`
ID NAME TIME 1 A 0 3 B 1
Und ich möchte GROUP BY
verwenden, um ein solches Ergebnis zu generieren (Rabatt nach TIME-Spalte sortieren):
ID NAME TIME 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
Versuchen Sie diese Lösung hier http://www.cafewebmaster.com/mysql-order-sort-group , sie konnte mein Problem auch lösen :)
Probe:
SELECT * FROM
(
select * from `my_table` order by timestamp desc
) as my_table_tmp
group by catid
order by nid desc
Nun, Sie müssen entscheiden, was Sie in den ID- und Zeitfeldern nach der Gruppe sehen möchten. Als Beispiel wähle ich die MAX (ID) und die SUMME (Zeit) und ordne dann die Gesamtzeit ab.
SELECT MAX(id), name, SUM(time) AS totaltime
FROM YourTableName
GROUP BY name
ORDER BY totaltime DESC
Hoffe das hilft.
Um Zeilen mit der höchsten Zeit pro Gruppe zu erhalten, können Sie einen Self-Join verwenden
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;
rückkehrergebnis wird sein:
+------+------+-----------+
| id | name | sum(time) |
+------+------+-----------+
| 2 | A | 3 |
| 3 | B | 1 |
+------+------+-----------+