2010-12-15 12 views
12

を並べ替える:mysqlグループによると、私は次の表を持って、各グループ

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
+1

あなたの質問を読むことによって、それはあなたが望む方法を少しは不明ですソートされるフィールド。 – Starx

+0

あなたが得ようとしている結果が100%明確ではありません。おそらくあなたが実際にやりたいことを明示的に試してみてください。 – Josh

+0

しかし、「オーダ・バイ・オーダー」を自然な順序にしたいのですが? –

答えて

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

これは実際に私のために働いた。サブクエリベースのソリューションよりも情報が少なくてすみますが、高速です。 –

+3

'NAME'カラムが' MAX(TIME) 'と同じ行にあるという保証はありません。上記のデータまたは小さなデータセットではうまくいくかもしれませんが、決して信頼できるものではありません。詳しくはhttp://stackoverflow.com/questions/14770671/mysql-order-by-before-group-by?noredirect=1#comment63515985_14770671 –

+0

を参照してください。 'ORDER BY'節だけが' SELECT'節のエイリアスを受け入れることができるようです、素晴らしいトリックです。 – JasonMing

0

まあ、あなたはグループの後のIDと時間フィールドで見たいものを決めなければなりません。一例として、MAX(ID)とSUM(時間)を選択して、totaltime descで注文します。

これが役立ちます。

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 
6
select * from (select * from table order by TIME DESC) t group by NAME 
関連する問題