SQL中如何对GROUP_CONCAT函数的结果值进行排序?
如何对GROUP_CONCAT中的所有值进行排序?
想要让GROUP_CONCAT拼接出来的打卡时间按升序排列很简单,只需要在GROUP_CONCAT函数内部加上ORDER BY子句指定排序规则就可以了。
原查询问题点
你原来的GROUP_CONCAT部分没有指定排序逻辑,所以输出的时间是无序的:
group_concat(CASE WHEN log_date = log_date THEN log_time ELSE '' END) AS logTimings
修改后的完整查询
我帮你调整了查询语句,在GROUP_CONCAT里加入了ORDER BY log_time ASC来实现时间升序排列,同时还简化了多余的CASE条件(log_date = log_date其实恒成立,直接用log_time就行):
SELECT emp.emp_id AS employeeId, emp.emp_name AS employeeName, group_concat(log_time ORDER BY log_time ASC) AS logTimings, shift AS shift FROM at_hr_logs_Jan l, at_hr_emp emp, at_dates dt WHERE user_id=00000247 AND l.user_id=emp.emp_code AND emp.dept_id=1 AND l.status_id=fn_getcodevalue_id('STS', 'ACTIVE') AND l.log_date=dt.att_date GROUP BY l.log_date ;
效果说明
修改后,logTimings字段就会按照时间从小到大排序输出,正好符合你的期望:
- 原语句实际输出:
18:03,17:40,13:35,11:48,09:19 - 修改后期望输出:
09:19,11:48,13:35,17:40,18:03
如果需要降序排列,只需要把ASC改成DESC就可以啦。
内容的提问来源于stack exchange,提问作者Simhachalam Sopeti
相关产品推荐
相关产品推荐

