如何在mysql中group by week

如何在mysql中group by week,第1张

以周一作为一周的开始, 使用mysql week行数模式5:

作为周划分的标准, 比如20170101是周天, week(20170101, 5) = 0,

分WEEK_IN_MONTH, 和WEEK_IN_YEAR两种情况进行分组:

WEEK_IN_YEAR:

# by sleest 2017/03/29 按每个日期所在一年中的第几周分组汇总

SELECT WEEK(MY_DATE, 5)+1 AS WEEK_OF_YEAR, COUNT(1) AS COUNT,

       GROUP_CONCAT(MY_DATE) AS INCLUDE_DATE

  FROM (SELECT '2017-01-01' AS MY_DATE

         UNION ALL

        SELECT '2017-02-08' 

         UNION ALL

        SELECT '2017-02-03' 

         UNION ALL

        SELECT '2017-02-01' 

         UNION ALL

        SELECT '2017-01-21') TMP

 GROUP BY WEEK(MY_DATE, 5) + 1

结果:

WEEK_IN_MONTH:

# by sleest 2017/03/29 按每个日期所在每个月的第几周分组汇总

SELECT WEEK(MY_DATE, 5) - WEEK(DATE_SUB(MY_DATE, INTERVAL DAYOFMONTH(MY_DATE) - 1 DAY), 5) + 1 AS WEEK_OF_MONTH, 

       COUNT(1) AS COUNT,

       GROUP_CONCAT(MY_DATE) AS INCLUDE_DATE

  FROM (SELECT '2017-01-01' AS MY_DATE

         UNION ALL

        SELECT '2017-02-08' 

         UNION ALL

        SELECT '2017-02-03' 

         UNION ALL

        SELECT '2017-02-01' 

         UNION ALL

        SELECT '2017-01-21') TMP

 GROUP BY WEEK(MY_DATE, 5) - WEEK(DATE_SUB(MY_DATE, INTERVAL DAYOFMONTH(MY_DATE) - 1 DAY), 5) + 1

结果:

mysql有丰富的时间函数:

ADDTIME (date2 ,time_interval ) //将time_interval加到date2

CONVERT_TZ (datetime2 ,fromTZ ,toTZ ) //转换时区

CURRENT_DATE ( ) //当前日期

CURRENT_TIME ( ) //当前时间

CURRENT_TIMESTAMP ( ) //当前时间戳

DATE (datetime ) //返回datetime的日期部分

DATE_ADD (date2 , INTERVAL d_value d_type ) //在date2中加上日期或时间

DATE_FORMAT (datetime ,FormatCodes ) //使用formatcodes格式显示datetime

DATE_SUB (date2 , INTERVAL d_value d_type ) //在date2上减去一个时间

DATEDIFF (date1 ,date2 ) //两个日期差

DAY (date ) //返回日期的天

DAYNAME (date ) //英文星期

DAYOFWEEK (date ) //星期(1-7) ,1为星期天

DAYOFYEAR (date ) //一年中的第几天

EXTRACT (interval_name FROM date ) //从date中提取日期的指定部分

MAKEDATE (year ,day ) //给出年及年中的第几天,生成日期串

MAKETIME (hour ,minute ,second ) //生成时间串

MONTHNAME (date ) //英文月份名

NOW ( ) //当前时间

SEC_TO_TIME (seconds ) //秒数转成时间

STR_TO_DATE (string ,format ) //字串转成时间,以format格式显示

TIMEDIFF (datetime1 ,datetime2 ) //两个时间差

TIME_TO_SEC (time ) //时间转秒数]

WEEK (date_time [,start_of_week ]) //第几周

YEAR (datetime ) //年份

DAYOFMONTH(datetime) //月的第几天

HOUR(datetime) //小时

LAST_DAY(date) //date的月的最后日期

MICROSECOND(datetime) //微秒

MONTH(datetime) //月

MINUTE(datetime) //分返回符号,正负或0

SQRT(number2) //开平方

以上函数仅供参考,详细的可以查看雷雪松的博客。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/8462440.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-16
下一篇 2023-04-16

发表评论

登录后才能评论

评论列表(0条)

保存