首页 文章

在组之前按顺序排序[复制]

提问于
浏览
0

这个问题在这里已有答案:

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

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月,2014年2月,2014年3月,2014年4月,2014年5月,2014年6月,2014年8月,2013年10月,2013年9月,2013年6月,2013年7月,2013年5月,2013年8月84277 2013年9月,2014年4月,2013年5月,2014年5月,2014年6月,2013年5月,2014年3月,2013年6月,2014年2月,2014年1月,2013年7月,2013年12月,2013年11月,2013年8月,2013年10月,2014年8月

上面的查询返回正确的月份,由idCodes分隔,但月份都是乱序 .

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

2 回答

  • 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

  • 1

    使用 group_concat() 中的 order by 选项:

    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;
    

相关问题