如何在MySQL中按日期分组?

时间:2012-08-30 05:58:43

标签: mysql date

以下MySQL查询按用户获取不同日期的所有周数据:

SELECT user_id,
       CONCAT(follow_up_date, ' - ', follow_up_date + INTERVAL 6 day) AS week,
       GROUP_CONCAT(follow_up_date)
FROM   feedback_2
WHERE  follow_up_date > ''
GROUP  BY WEEK(follow_up_date),
          user_id

输出:

---------------------------------------------------------------
user_id |         week           | group_concat(follow_up_date)|
---------------------------------------------------------------
4        2012-08-28 - 2012-09-03 | 2012-08-28,2012-08-28,2012-08-29
14       2012-08-28 - 2012-09-03 | 2012-08-28 

但我的要求是,如何为同一用户分隔不同的日期。

---------------------------------------------------------------
user_id |         week           | group_concat(follow_up_date)|
---------------------------------------------------------------
4        2012-08-28 - 2012-09-03 | 2012-08-28,2012-08-28
4        2012-08-28 - 2012-09-03 | 2012-08-29
14       2012-08-28 - 2012-09-03 | 2012-08-28 

2 个答案:

答案 0 :(得分:1)

未经测试,但您可以尝试一下:

SELECT user_id,
       _CONCAT(DATE_SUB(follow_up_date, INTERVAL _DAYOFWEEK(follow_up_date)-3
                                        day),
       ' - ', DATE_SUB(follow_up_date, INTERVAL _DAYOFWEEK(follow_up_date)-3 day
              )
       + INTERVAL 6 day) AS week,
       GROUP_CONCAT(follow_up_date)
FROM   feedback_2
WHERE  follow_up_date > ''
GROUP  BY WEEK(follow_up_date)

当表达式中的部分单词开始时,请删除_字符,以便查询正确。

答案 1 :(得分:1)

SELECT  `user_id`, 
        CONCAT(`follow_up_date`, ' - ', `follow_up_date` + INTERVAL 6 DAY) AS f_week, 
        GROUP_CONCAT(`follow_up_date`) AS c_date
FROM feedback_2 
WHERE `follow_up_date` > ''
GROUP BY f_week, `user_id`
ORDER BY  `user_id`, f_week