2017-01-31 11 views
0

私は自分のデータベースにデータを格納しています。保存されるデータは次のようになりますご注文月単位で

id | upload_month | created_at 
----------------------------------------- 
1 | Febuary  | 2017-01-30 13:22:39 
----------------------------------------- 
2 | January  | 2017-01-30 13:23:42 
----------------------------------------- 
3 | January  | 2017-01-30 13:25:33 

私が必要としたのは、最新のcreated_at日付を使用して一意のupload_monthsを取得することでした。したがって、上記のため、私は、次のSQL上記の作品も今

SELECT * 
    FROM uploaded_file 
    JOIN (SELECT uploaded_file.upload_month, MAX(uploaded_file.created_at) created_at 
      FROM uploaded_file 
     GROUP BY uploaded_file.upload_month) months 
    ON uploaded_file.upload_month = months.upload_month 
    AND uploaded_file.created_at = months.created_at 

は、今、私は上記の結果を注文するのを楽しみにしていていますこれを実現するために、この

id | upload_month | created_at 
----------------------------------------- 
1 | Febuary  | 2017-01-30 13:22:39 
----------------------------------------- 
2 | January  | 2017-01-30 13:25:33 
----------------------------------------- 

のようなものの後でしたupload_monthによって。理想的には、上記は1月から2月までです。

upload_monthで注文できる方法はありますか?

おかげ

答えて

3

。例えば

order by str_to_date(concat(year(current_date()),'-', upload_month,'-01'),'%Y-%M-%d') 
1
ORDER BY CASE months.upload_month 
    WHEN 'January' THEN 1 
    WHEN 'February' THEN 2 
    -- ... You get the idea 
    WHEN 'December' THEN 12 
END 

そして次回は、この問題を回避するためにTINYINTとして月を保存することができます。あなたが気にすべてが年に関係なく、時系列順に数ヶ月を取得している、そして、あなたが日付として月書式設定することができ、その後、ソートそれによると仮定すると、

+0

MySQLは月の名前を知っています – Strawberry

+1

@Strawberry少なくとも、*英語*の名前。したがって、私は他のソリューションを投稿することをお勧めします。 –

2

あなたは数に月の名前を変換し、このような順として使用することができます。

order by month(str_to_date(upload_month,'%M')) 
+1

何らかの理由で%bが動作しなかったので、それを%Mに変更する必要がありました。 –

+0

'%b \t短縮月名(Jan..Dec)' –

関連する問題