在Group By之前排序

时间:2014-09-11 14:39:51

标签: mysql sql-order-by

我需要在几千条记录中提取一些数据,但是我在排序结果时遇到了麻烦。

SELECT IdCode, GROUP_CONCAT(' ',CONCAT(MONTHNAME(ei.StartDatetime),' ',YEAR(ei.StartDatetime))) 
FROM exclusion_import_data eid JOIN exclusion_import ei ON ei.ImportId = eid.ImportId 
WHERE ( IdCode IN ( '84277', '253533' ))  
GROUP BY IdCode 
ORDER BY RecordId ASC;

基本上我试图查看我们系统中出现的特定记录。

  

253533 2013年5月,2013年11月,2013年12月,2014年1月,2月   2014年,2014年3月,2014年4月,2014年5月,2014年6月,2014年8月,   2013年10月,2013年9月,2013年6月,2013年7月,2013年5月,8月   2013 84277 2013年9月,2014年4月,2013年5月,2014年5月,2014年6月,   2013年5月,2014年3月,2013年6月,2014年2月,2014年1月,7月   2013年,2013年12月,2013年11月,2013年8月,2013年10月,8月   2014

以上查询返回正确的月份,以idCodes分隔,但月份全部乱序。

如何在对记录进行分组之前对记录进行排序?

2 个答案:

答案 0 :(得分:1)

使用order by group_concat()中的SELECT IdCode, GROUP_CONCAT(' ', CONCAT(MONTHNAME(ei.StartDatetime),' ',YEAR(ei.StartDatetime)) ORDER BY ei.StartDatetime) FROM exclusion_import_data eid JOIN exclusion_import ei ON ei.ImportId = eid.ImportId WHERE ( IdCode IN ( '84277', '253533' )) GROUP BY IdCode ORDER BY RecordId ASC; 选项

{{1}}

答案 1 :(得分:0)

您可以在GROUP_CONCAT函数中指定排序,例如:

GROUP_CONCAT(DATE_FORMAT(ei.StartDatetime,'%M %Y') ORDER BY ei.StartDatetime) 
                                                   ^^^^^^^^^^^^^^^^^^^^^^^^^

(我的偏好是通过单个函数调用获得月份和年份,以及对列的一个引用,而不是三个函数调用和对同一列的两个引用。我已经在上面证明了这一点。)

参考:http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_group-concat