mysql 按日、周、月、年統計sql語句整理,實現報表統計可視化
最近在做報表統計,前端可視化插件用的是Echarts,個人認為是目前免費插件里的翹楚http://echarts.baidu.com/demo.html#pie-doughnut例子演示
現在重點如何把后台數據源搞定,我采用的是mybatis,所以重點是怎么把sql語句寫好。
– –按日
SELECT COUNT(*),DATE(CreateTime) FROM t_voipchannelrecord WHERE YEAR(CreateTime)='2016' GROUP BY DAY(CreateTime)
- 1
– –按周
SELECT COUNT(*),WEEK(CreateTime) FROM t_voipchannelrecord WHERE MONTH(CreateTime) = '8' GROUP BY WEEK(CreateTime)
- 1
–周一到周五每天的統計結果
SELECT COUNT(*),DAYNAME(CreateTime) FROM t_voipchannelrecord WHERE YEAR(CreateTime) = '2016' GROUP BY DAYNAME(CreateTime)
- 1
–統計本周數據
SELECT COUNT(*) FROM t_voipchannelrecord WHERE MONTH(CreateTime) = MONTH(CURDATE()) AND WEEK(CreateTime) = WEEK(CURDATE())
- 1
- 2
–按月統計
SELECT COUNT(*),MONTH(CreateTime) FROM t_voipchannelrecord WHERE YEAR(CreateTime) = '2016' GROUP BY MONTH(CreateTime)
- 1
–統計本月數據
SELECT COUNT(*) FROM t_voipchannelrecord WHERE MONTH(CreateTime) = MONTH(CURDATE()) AND YEAR(CreateTime) = YEAR(CURDATE())
- 1
- 2
–按季統計
SELECT COUNT(*),QUARTER(CreateTime) FROM t_voipchannelrecord WHERE YEAR(CreateTime) = '2016' GROUP BY QUARTER(CreateTime)
- 1
–按年統計
SELECT COUNT(*),YEAR(CreateTime) FROM t_voipchannelrecord GROUP BY YEAR(CreateTime)
- 1
- 2
–時間段(該段參考:出處)
N天內記錄
WHERE TO_DAYS(NOW()) - TO_DAYS(時間字段) <= N 當天的記錄 where date(時間字段)=date(now()) 或 where to_days(時間字段) = to_days(now()); 查詢一周: select * from table where DATE_SUB(CURDATE(), INTERVAL 7 DAY) <= date(column_time); 查詢一個月: select * from table where DATE_SUB(CURDATE(), INTERVAL INTERVAL 1 MONTH) <= date(column_time); 查詢'06-03'到'07-08'這個時間段內所有過生日的會員: Select * From user Where DATE_FORMAT(birthday,'%m-%d') >= '06-03' and DATE_FORMAT(birthday,'%m-%d') <= '07-08'; 統計一季度數據,表時間字段為:savetime group by concat(date_format(savetime, '%Y '),FLOOR((date_format(savetime, '%m ')+2)/3)) 或 select YEAR(savetime)*10+((MONTH(savetime)-1) DIV 3) +1,count(*) from yourTable group by YEAR(savetime)*10+((MONTH(savetime)-1) DIV 3) +1;
N天內記錄 WHERE TO_DAYS(NOW()) - TO_DAYS(時間字段) <= N 當天的記錄 where date(時間字段)=date(now()) 或 where to_days(時間字段) = to_days(now()); 查詢一周: select * from table where DATE_SUB(CURDATE(), INTERVAL 7 DAY) <= date(column_time); 查詢一個月: select * from table where DATE_SUB(CURDATE(), INTERVAL INTERVAL 1 MONTH) <= date(column_time); 查詢'06-03'到'07-08'這個時間段內所有過生日的會員: Select * From user Where DATE_FORMAT(birthday,'%m-%d') >= '06-03' and DATE_FORMAT(birthday,'%m-%d') <= '07-08'; 統計一季度數據,表時間字段為:savetime group by concat(date_format(savetime, '%Y '),FLOOR((date_format(savetime, '%m ')+2)/3)) 或 select YEAR(savetime)*10+((MONTH(savetime)-1) DIV 3) +1,count(*) from yourTable group by YEAR(savetime)*10+((MONTH(savetime)-1) DIV 3) +1;