日期:2014-05-16  浏览次数:20603 次

MYSQL时间统计查询

----------------------
id,      create_time
1,        20140101
2          20140102
3           20140103
4          20140104
5           20140105
------------------- tableA


求20140101时间到 now()  有几个星期, 从星期一 到星期天 有多少数据, 每一天下面在分小时统计有多少数据 1个id就是一条数据

        时间 ,星期一, 星期二.......................合计
     9-10
     10-11
  ...
......
......
   20-21
------解决方案--------------------
select *,(monday+tuesday+wednesday+thursday+friday+saturday+sunday) as date_count from (
select ('9点-10点') as time,
Sum(case when WEEKDAY(time) = 0 and  HOUR(time) = 9 THEN 1 else 0 end) as monday,
Sum(case when WEEKDAY(time) = 1 and  HOUR(time) = 9 THEN 1 else 0 end) as tuesday,
Sum(case when WEEKDAY(time) = 2 and  HOUR(time) = 9 THEN 1 else 0 end) as wednesday,
Sum(case when WEEKDAY(time) = 3 and  HOUR(time) = 9 THEN 1 else 0 end) as thursday,
Sum(case when WEEKDAY(time) = 4 and  HOUR(time) = 9 THEN 1 else 0 end) as friday,
Sum(case when WEEKDAY(time) = 5 and  HOUR(time) = 9 THEN 1 else 0 end) as saturday,
Sum(case when WEEKDAY(time) = 6 and  HOUR(time) = 9 THEN 1 else 0 end) as sunday
from tableA
where  time >= 20140401 and time <= NOW()
UNION all
select ('10点-11点') as time ,
Sum(case when WEEKDAY(time) = 0 and 10 = HOUR (time) THEN 1 else 0 end) as monday,
Sum(case when WEEKDAY(time) = 1 and 10 = HOUR (time) THEN 1 else 0 end) as tuesday,
Sum(case when WEEKDAY(time) = 2 and 10 = HOUR (time) THEN 1 else 0 end) as wednesday,
Sum(case when WEEKDAY(time) = 3 and 10 = HOUR (time) THEN 1 else 0 end) as thursday,
Sum(case when WEEKDAY(time) = 4 and 10 = HOUR (time) THEN 1 else 0 end) as friday,
Sum(case when WEEKDAY(time) = 5 and 10 = HOUR (time) THEN 1 else 0 end) as saturday,
Sum(case when WEEKDAY(time) = 6 and 10 = HOUR (time) THEN 1 else 0 end) as sunday
from tableA
where time >= 20140401 and time <= NOW()
UNION all
select ('11点-12点') as time ,
Sum(case when WEEKDAY(time) = 0 and 11 = HOUR&nbs