免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 16717 | 回复: 15

查询当年/当月/当日数据。 [复制链接]

论坛徽章:
3
未羊
日期:2013-11-18 15:17:06酉鸡
日期:2013-12-06 17:07:16天蝎座
日期:2014-06-11 12:37:07
发表于 2013-11-19 13:54 |显示全部楼层
30可用积分
本帖最后由 墨迹哥 于 2013-11-19 13:54 编辑

目前需求:
1、当年的12个月的数据。如果没有数据则为0.
2、当月的所有天数的数据。如果没有数据则为0.(这里有三个情况,2月有的时候是28天或多少天的,还有就是30天和31天的,实在难弄就统计当月所有数据。)
3、当日的24小时内的数据,如果没有数据则为0.

例子:
  1. select count(*) from w3a_log_monitor_attack where attack_date like '%2013-01%' and attack_user='192.168.31.135' union all select count(*) from w3a_log_monitor_attack where attack_date like '%2013-02%' and attack_user='192.168.31.135' union all select count(*) from w3a_log_monitor_attack where attack_date like '%2013-03%' and attack_user='192.168.31.135' union all select count(*) from w3a_log_monitor_attack where attack_date like '%2013-04%' and attack_user='192.168.31.135' union all select count(*) from w3a_log_monitor_attack where attack_date like '%2013-05%' and attack_user='192.168.31.135';
复制代码
表名:
  1. w3a_log_monitor_attack
复制代码
字段意思:

  1. attack_date 日期字段
  2. attack_user 用户字段
复制代码

最佳答案

查看完整内容

回复 4# 墨迹哥

论坛徽章:
2
酉鸡
日期:2014-02-19 09:11:08摩羯座
日期:2014-05-23 10:16:16
发表于 2013-11-19 13:54 |显示全部楼层
  1. SELECT COUNT(*),CONCAT(YEAR(attack_date),'-',MONTH(attack_date),'-',DAYOFMONTH(attack_date)) FROM w3a_log_monitor_attack WHERE attack_user='192.168.31.135' and attack_date>DATE_SUB(CURDATE(),INTERVAL DAY(CURDATE())-1 DAY) GROUP BY CONCAT(YEAR(attack_date),'-',MONTH(attack_date),'-',DAYOFMONTH(attack_date))
  2. 你真懒。。。。
复制代码
回复 4# 墨迹哥


   

论坛徽章:
3
未羊
日期:2013-11-18 15:17:06酉鸡
日期:2013-12-06 17:07:16天蝎座
日期:2014-06-11 12:37:07
发表于 2013-11-19 13:56 |显示全部楼层
@tiankafeiwu  来吧。。。暴风雨来的更猛烈点把。。

论坛徽章:
2
酉鸡
日期:2014-02-19 09:11:08摩羯座
日期:2014-05-23 10:16:16
发表于 2013-11-19 14:42 |显示全部楼层
本帖最后由 tiankafeiwu 于 2013-11-19 14:43 编辑

1:当年所有有数据的月份(按月分组):
  1. SELECT COUNT(*),CONCAT(YEAR(attack_date),'-',MONTH(attack_date)) FROM w3a_log_monitor_attack WHERE attack_user='192.168.31.135' GROUP BY CONCAT(YEAR(attack_date),'-',MONTH(attack_date))
复制代码
2:全年按天分组,如果要当月就加个where时间条件即可:
  1. SELECT COUNT(*),CONCAT(YEAR(attack_date),'-',MONTH(attack_date),'-',DAYOFMONTH(attack_date)) FROM w3a_log_monitor_attack WHERE attack_user='192.168.31.135' GROUP BY CONCAT(YEAR(attack_date),'-',MONTH(attack_date),'-',DAYOFMONTH(attack_date))
复制代码
3:当日24小时,即当天0点到当前时间,限当天:
  1. SELECT COUNT(*),HOUR(attack_date) FROM w3a_log_monitor_attack WHERE attack_user='192.168.31.135' GROUP BY HOUR(attack_date) WHERE attack_date > DATE(NOW())
复制代码
2和3差不多。

没有数据的0,你用程序控制下咯

论坛徽章:
3
未羊
日期:2013-11-18 15:17:06酉鸡
日期:2013-12-06 17:07:16天蝎座
日期:2014-06-11 12:37:07
发表于 2013-11-20 14:33 |显示全部楼层
回复 3# tiankafeiwu


    第一个可用。。。
    第二个要当月所有天的。。。
    第三个报错。。。
  1. mysql> SELECT COUNT(*),HOUR(attack_date) FROM w3a_log_monitor_attack WHERE attack_user='192.168.31.135' GROUP BY HOUR(attack_date) WHERE attack_date > DATE(NOW());
  2. ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE attack_date > DATE(NOW())' at line 1
复制代码

论坛徽章:
0
发表于 2013-11-20 15:38 |显示全部楼层
当月:

select count(*),date_format(attack_date,'%Y-%m-%s') as day from w3a_log_monitor_attack
where w3a_log_monitor_attack >= concat(DATE_SUB(CURDATE(),INTERVAL DAY(CURDATE())-1 DAY),' 00:00:00')
group by day;


当日:

select count(*),date_format(attack_date,'%Y-%m-%s %H') as hour from w3a_log_monitor_attack
where w3a_log_monitor_attack >= concat(CURDATE(),' 00:00:00')
group by hour;

论坛徽章:
2
酉鸡
日期:2014-02-19 09:11:08摩羯座
日期:2014-05-23 10:16:16
发表于 2013-11-20 16:54 |显示全部楼层
本帖最后由 tiankafeiwu 于 2013-11-20 16:55 编辑

mysql> SELECT COUNT(*),HOUR(attack_date) FROM w3a_log_monitor_attack WHERE attack_user='192.168.31.135' and attack_date > DATE(NOW()) GROUP BY HOUR(attack_date) ;
把第二个where改成and就行了,疏忽了
回复 4# 墨迹哥


   

论坛徽章:
3
未羊
日期:2013-11-18 15:17:06酉鸡
日期:2013-12-06 17:07:16天蝎座
日期:2014-06-11 12:37:07
发表于 2013-11-20 17:39 |显示全部楼层
回复 5# wangjj20
  1. mysql> select count(*),date_format(attack_date,'%Y-%m-%s') as day from w3a_log_monitor_attack
  2.     -> where w3a_log_monitor_attack >= concat(DATE_SUB(CURDATE(),INTERVAL DAY(CURDATE())-1 DAY),' 00:00:00')
  3.     -> group by day;
  4. ERROR 1054 (42S22): Unknown column 'w3a_log_monitor_attack' in 'where clause'
  5. mysql>
  6. mysql>
  7. mysql>
  8. mysql> select count(*),date_format(attack_date,'%Y-%m-%s') as day from w3a_log_monitor_attack where w3a_log_monitor_attack >= concat(DATE_SUB(CURDATE(),INTERVAL DAY(CURDATE())-1 DAY),' 00:00:00') group by day;
  9. ERROR 1054 (42S22): Unknown column 'w3a_log_monitor_attack' in 'where clause'
复制代码

论坛徽章:
3
未羊
日期:2013-11-18 15:17:06酉鸡
日期:2013-12-06 17:07:16天蝎座
日期:2014-06-11 12:37:07
发表于 2013-11-20 17:42 |显示全部楼层
回复 7# tiankafeiwu


    貌似都行了,我回头加点数据试试。今天快下班了。。赶地铁去。。。
  1. mysql> SELECT COUNT(*),HOUR(attack_date) FROM w3a_log_monitor_attack WHERE attack_user='192.168.56.101' and attack_date > DATE(NOW()) GROUP BY HOUR(attack_date) ;
  2. Empty set (0.01 sec)

  3. mysql>
  4. mysql>
  5. mysql> SELECT COUNT(*),CONCAT(YEAR(attack_date),'-',MONTH(attack_date),'-',DAYOFMONTH(attack_date)) FROM w3a_log_monitor_attack WHERE attack_user='192.168.31.135' and attack_date>DATE_SUB(CURDATE(),INTERVAL DAY(CURDATE())-1 DAY) GROUP BY CONCAT(YEAR(attack_date),'-',MONTH(attack_date),'-',DAYOFMONTH(attack_date));
  6. +----------+------------------------------------------------------------------------------+
  7. | COUNT(*) | CONCAT(YEAR(attack_date),'-',MONTH(attack_date),'-',DAYOFMONTH(attack_date)) |
  8. +----------+------------------------------------------------------------------------------+
  9. |      170 | 2013-11-5                                                                    |
  10. +----------+------------------------------------------------------------------------------+
  11. 1 row in set (0.01 sec)
复制代码

论坛徽章:
3
未羊
日期:2013-11-18 15:17:06酉鸡
日期:2013-12-06 17:07:16天蝎座
日期:2014-06-11 12:37:07
发表于 2013-11-20 17:46 |显示全部楼层
@tiankafeiwu你看看还有没有啥补充的,我把你的整理一下:

查当年的12个月的:
  1. SELECT COUNT(*),CONCAT(YEAR(attack_date),'-',MONTH(attack_date)) FROM w3a_log_monitor_attack WHERE attack_user='192.168.31.135' GROUP BY CONCAT(YEAR(attack_date),'-',MONTH(attack_date))
复制代码
查当月的30/31天的:
  1. SELECT COUNT(*),CONCAT(YEAR(attack_date),'-',MONTH(attack_date),'-',DAYOFMONTH(attack_date)) FROM w3a_log_monitor_attack WHERE attack_user='192.168.31.135' and attack_date>DATE_SUB(CURDATE(),INTERVAL DAY(CURDATE())-1 DAY) GROUP BY CONCAT(YEAR(attack_date),'-',MONTH(attack_date),'-',DAYOFMONTH(attack_date))
复制代码
查小时的(24小时):
  1. SELECT COUNT(*),HOUR(attack_date) FROM w3a_log_monitor_attack WHERE attack_user='192.168.31.135' and attack_date > DATE(NOW()) GROUP BY HOUR(attack_date) ;
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP