如何在MySQL中按月份排序

3

这里有演示

顺序是十一月和十月。我该如何添加ORDER BY,以便按月份排序,即1月、2月、3月等等。

谢谢提前。

CREATE TABLE `hw_homework` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `studentid` int(10) NOT NULL,
  `subjectid` int(10) NOT NULL,
  `assignment_name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `teacherid` int(10) NOT NULL,
  `date` date NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=55 ;

--
-- Dumping data for table `hw_homework`
--

INSERT INTO `hw_homework` (`id`, `studentid`, `subjectid`, `assignment_name`, `teacherid`, `date`) VALUES
(52, 56, 13, '1A', 20, '2012-10-28'),
(53, 56, 6, '12', 18, '2012-10-28'),
(54, 56, 4, 'page42', 59, '2012-11-02');


SELECT  studentID, 
        DATE_FORMAT(`date`,'%M') `month`,
        COUNT(studentid) totalMissed
FROM hw_homework
WHERE studentid = 56
GROUP BY studentid, DATE_FORMAT(`date`, '%M')

为什么不直接使用“按日期升序排序”? - guido
3
你试过使用 "order by MONTH(date)" 吗? - Chuidiang
7个回答

8
正如Chuidiang提出的那样,我添加了以下内容以获得我想要的结果。感谢大家。
ORDER BY Month(date)

2
在您的情况下,它是基于字母顺序排序的。以下内容将给出正确结果。
SELECT  studentID, 
    DATE_FORMAT(`date`,'%M') `month`,
    COUNT(studentid) totalMissed
FROM hw_homework
WHERE studentid = 56
GROUP BY studentid, DATE_FORMAT(`date`, '%M')
ORDER BY DATE_FORMAT(`date`,'%m')

1

在寻找按月份名称排序的解决方案时,偶然发现了这篇文章。可能不是非常优雅的解决方案,但您可以使用FIELD字符串函数来获取结果集。

SELECT
studentID,
DATE_FORMAT(`date`, '%M') `month`,
COUNT(studentid) totalMissed FROM
hw_homework WHERE
studentid = 56 GROUP BY
studentid, 
DATE_FORMAT(`date`, '%M') ORDER BY
FIELD(
    DATE_FORMAT(`date`, '%M'),
    'January',
    'February',
    'March',
    'April',
    'May',
    'June',
    'July',
    'August',
    'September',
    'October',
    'November',
    'December'
);

尝试一下。此外,您可以使用更简单的函数MONTHNAME(date)替换DATE_FORMAT以提高可读性。

0
 SELECT  studentID, 
    DATE_FORMAT(`date`,'%M') as `month`,
    COUNT(studentid) totalMissed
FROM hw_homework
WHERE studentid = 56
order by Month(month)
GROUP BY studentid, DATE_FORMAT(`date`, '%M')

0
SELECT  studentID, 
        DATE_FORMAT(`date`,'%M') `month`,
        COUNT(studentid) totalMissed
FROM hw_homework
WHERE studentid = 56
GROUP BY MONTH(DATE) ASC

-1

在你的查询中使用如下

GROUP BY MONTH(date)

-1

mysql> select * from hw_homework order by date asc; //按日期升序排列

OR

mysql> select * from hw_homework order by date desc; //按日期降序排列


1
你还没有理解被问的是什么。请查看其他答案以了解更多信息。 - Michael Petrotta

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接