我正在将数据存储在我的数据库中。存储的数据如下所示
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
我需要做的是获取唯一的upload_months,始终使用最新的created_at日期。所以对于上面的事情我是在追求这样的事情
id | upload_month | created_at
-----------------------------------------
1 | Febuary | 2017-01-30 13:22:39
-----------------------------------------
2 | January | 2017-01-30 13:25:33
-----------------------------------------
为实现这一点,我有以下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
现在上面的效果很好,但现在我想通过upload_month来订购上面的结果。理想情况下,上面应该是1月1日,然后是2月。
我可以通过upload_month订购任何方式吗?
由于
答案 0 :(得分:3)
假设您所关心的是按照时间顺序获取月份而不考虑年份,那么您可以将月份格式化为日期,然后按此排序。
例如:
order by str_to_date(concat(year(current_date()),'-', upload_month,'-01'),'%Y-%M-%d')
答案 1 :(得分:2)
ORDER BY CASE months.upload_month
WHEN 'January' THEN 1
WHEN 'February' THEN 2
-- ... You get the idea
WHEN 'December' THEN 12
END
下次您可以将月份存储为TINYINT
以避免此问题。
答案 2 :(得分:2)
您可以将月份名称转换为数字,并按此顺序使用它。
order by month(str_to_date(upload_month,'%M'))