在MySQL中的同一个字段中使用多个group_concats和group by

时间:2017-05-15 02:19:27

标签: mysql group-concat

我正在尝试编写一个跟踪一个月跨度的事件的查询,该月的每一天都是结果的列。尝试在每月的每一天使用group_concat时,仅返回第一次出现的日期。我已经包含了下面我正在使用的2个表的模式和数据,以及我期望看到的结果和我尝试过的SQL查询。

注意:我已经尽可能地简化了数据和架构,以找到问题的根源。

跟踪

tracking_id  |  date
_______________________________________
1            |  2017-05-01
2            |  2017-05-02

TrackingStatus

trackingstatus_id  |  tracking_id  |  time
___________________________________________
1                  |  1            |  09:00
2                  |  2            |  10:00
3                  |  2            |  14:00

期望的结果

Month  | Day1   |  Day2
5      | 09:00  |  10:00,14:00

我尝试了以下查询

SELECT 
    MONTH(date),
    if( date = '2017-05-01', group_concat(timeadministered), NULL ),
    if( date = '2017-05-02', group_concat(timeadministered), NULL )
FROM trackingstatus ts
JOIN tracking t ON t.tracking_id = ts.tracking_id
GROUP BY MONTH(date)

但我得到以下结果

Month  | Day1               |  Day2
5      | 09:00,10:00,14:00  |  

我知道当我在日期使用group by时,只有第一个日期值被行识别。有没有更好的方法来使用group by和group_concat?

1 个答案:

答案 0 :(得分:0)

您可能希望聚合函数围绕 SELECT列表中的表达式。但是在GROUP_CONCAT周围包装另一个聚合并没有多大意义,因为GROUP BY子句中的表达式意味着每个月只会返回一行。

也许你想要这样的东西:

 SELECT MONTH(t.date)
      , GROUP_CONCAT(IF(t.date = '2017-05-01',t.timeadministered,NULL)) AS Day01
      , GROUP_CONCAT(IF(t.date = '2017-05-02',t.timeadministered,NULL)) AS Day02

  FROM ...
 GROUP BY MONTH(t.date)