MYSQLでタイトル毎に一番日付の小さいもの同士を比べて並び替えたい

投稿者: Anonymous

titleが同じ行を隣同士にして、そのタイトルの中で日付の小さいもの同士を比べて並び替えるにはどのようにすればよいでしょうか?
・・・うまく説明できずに申し訳ありません。

①の結果

id  title  date
---------------------
1  AAAAA  2017-01-23
2  AAAAA  2017-01-12
3  BBBBB  2017-01-01
4  CCCCC  2017-01-18
5  CCCCC  2017-01-10

②(やりたいこと)

id  title  date
---------------------
3  BBBBB  2017-01-01←ここの日付で並び替え
5  CCCCC  2017-01-10←ここの日付で並び替え
4  CCCCC  2017-01-18
2  AAAAA  2017-01-12←ここの日付で並び替え
1  AAAAA  2017-01-23

解決

別解です。
データ量が多い場合には、こちらの方が高速に処理できるはずです。(多分… 気になる場合には計測してみてください)

SELECT tab1.*, tab1sub.mindate
FROM tab1
JOIN (SELECT title title, MIN(date) mindate FROM tab1 GROUP BY title) AS tab1sub
ON tab1.title = tab1sub.title
ORDER BY tab1sub.mindate, tab1.title, tab1.id;

(補足) サブクエリ SELECT title title, MIN(date) mindate FROM tab1 GROUP BY title で以下のように title とその date の最小値 (mindate) を求め、tab1 と JOIN しています。

+-------+------------+
| title | mindate    |
+-------+------------+
| AAAAA | 2017-01-12 |
| BBBBB | 2017-01-01 |
| CCCCC | 2017-01-10 |
+-------+------------+
回答者: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *