35808


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

①の結果

[code]

    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
    
[/code]

②（やりたいこと）

[code]

    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
    
[/code]


CC BY-SA 3.0
2017-06-22T04:11:10.093
35798
2017-06-22T08:28:48.767
23921
question
mysql sql
MYSQLでタイトル毎に一番日付の小さいもの同士を比べて並び替えたい


こんな感じでどうですか？

[code]

    select t1.id, t1.title, t1.date from yourtable t1, (select title, min(date) as mindate from yourtable group by title) t2 where t1.title=t2.title order by t2.mindate, t2.title
    
[/code]


CC BY-SA 3.0
2017-06-22T07:03:16.793
35806
2017-06-22T07:03:16.793
21092
35798
answer


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

[code]

    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;
    
[/code]

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

[code]

    +-------+------------+
    | title | mindate    |
    +-------+------------+
    | AAAAA | 2017-01-12 |
    | BBBBB | 2017-01-01 |
    | CCCCC | 2017-01-10 |
    +-------+------------+
    
[/code]


CC BY-SA 3.0
2017-06-22T08:28:48.767
35808
2017-06-22T08:28:48.767
76
35798
answer