在 MySQL 中的同一字段上使用多个 group_concats 和分组依据

Using multiple group_concats and group by on the same field in MySQL

我正在尝试编写一个查询来跟踪一个月内发生的事件,每个月的每一天都是结果的一列。当尝试对一个月中的每一天使用 group_concat 时,仅返回第一次出现的日期。我在下面列出了我正在使用的 2 个表的模式和数据,以及我希望看到的结果和我尝试过的 SQL 查询。

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

追踪

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

跟踪状态

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_concat?

您可能需要一个聚合函数围绕 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)