Mysql 在“分组依据”之前按“排序依据”

Mysql 在“分组依据”之前按“排序依据”,mysql,sql-order-by,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', '2535

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

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月、2013年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月、2013年8月 2014年

上面的查询返回正确的月份,以IDCODE分隔,但是月份都是无序的


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

您可以在
GROUP\u CONCAT
函数中指定排序,例如:

GROUP_CONCAT(DATE_FORMAT(ei.StartDatetime,'%M %Y') ORDER BY ei.StartDatetime) 
                                                   ^^^^^^^^^^^^^^^^^^^^^^^^^
(我倾向于使用一个函数调用和一个对列的引用来获取月份和年份,而不是三个函数调用和两个对同一列的引用。我在上面也演示了这一点。)


参考:

使用
组中的
排序选项。\u concat()


管理摘要:您可以
group\u concat(myfield ORDER BY myfield ASC)
,因此在您的案例中,将
ORDER BY ei.StartDateTime
添加到
group\u 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;