This question already has answers here:
GROUP_CONCAT ORDER BY
                                
                                    (4个答案)
                                
                        
                                5年前关闭。
            
                    
我需要在几千条记录中提取一些数据,但是在对结果进行排序时遇到了麻烦。

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分隔,但是月份都乱了。

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

最佳答案

您可以在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

关于mysql - 在分组依据之前排序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25790387/

10-16 07:44