详解Mysql查询今日、昨天、本月、上个月、去年今天、最近几天的数据

数据库 log_web 表信息如下:
idiptime
10:0:0:0:0:0:0:12017-08-31 15:51:57
20:0:0:0:0:0:0:12017-08-31 15:52:51
30:0:0:0:0:0:0:12017-09-01 08:35:50
40:0:0:0:0:0:0:12017-09-01 08:36:51
1.获取今日数据

敲黑板:Mysql中的 now(),curdate()函数:获取当前日期

select now(),curdate();

运行SQL后得到的数据如下所示:

now()curdate()
2017-09-01 12:07:342017-09-01

->now()函数可以精确到 年月日时分秒,curdate()函数可以精确到 年月日

今日的网站访问量获取方式为

select count(*) from log_web where time >= CURDATE();
运行SQL:count(*)值 2


2.获取昨日数据

敲黑板:DATE(date) 函数:将参数转为日期输出,精确到年月日
DATE_SUB(date,INTERVAL expr type)函数:获取一个指定间隔的日期, 详见API

SELECT now(),DATE(now()), DATE_SUB(CURDATE(),INTERVAL 1 DAY);

运行SQL后得到的数据如下所示:

now()DATE(now())DATE_SUB(CURDATE(),INTERVAL 1 DAY)
2017-09-01 12:07:342017-09-012017-08-31

->Date函数使值输出为YYYY-MM-DD格式的日期;
->date_sub函数,传递了{date=curdate(),expr=1,type=day}三个参数,{curdate()=2017-09-01};运行为:获取距离当前时间1天的日期;type的参数可以为多种,见API

昨日的网站访问量获取方式为

SELECT count(*) from log_web where date(time) = DATE_SUB(CURDATE(),INTERVAL 1 DAY);
运行SQL:count(*)值 2

同理可得,前天的网站访问量获取方式为

SELECT count(*) from log_web where date(time) = DATE_SUB(CURDATE(),INTERVAL 2 DAY);

去年今日的网站访问量获取方式为

SELECT count(*) from log_web where date(time) = DATE_SUB(CURDATE(),INTERVAL 1 YEAR);


3.获取近7天的访问量,不包含今天

SELECT count(*) from log_web where time > DATE_SUB(CURDATE(),INTERVAL 7 DAY) and time < DATE(now());

curdate()=2017-09-01;
DATE_SUB(CURDATE(),INTERVAL 7 DAY) =2017-08-25;
now()=2017-09-01 12:07:34 ;
DATE(now())=2017-09-01;
–>查询时间为最近7天的数据。 2017-09-01>time>2017_08_25
若没有and time < DATE(now()),则获取到的数据为最近7天,25、26、27、28、29、30 、31,以及当天09-01的数据值;time>2017_08_25

同理获取近30天的访问量,不包含今天

SELECT count(*) from log_web where time > DATE_SUB(CURDATE(),INTERVAL 30 DAY) and time < DATE(now());

同理可得,前几周,前几个月,前几小时,前几分钟的数据,参考API参数

4.获取本月数据

敲黑板:DATE_FORMAT(date, ‘%Y%m’ )函数

select DATE_FORMAT(now(), ‘%Y%m’ );

运行SQL后得到的数据如下所示:

now()
201709
->  得当当前月的月份
> **SELECT count(*) FROM log_web WHERE DATE_FORMAT(time, '%Y%m' ) = DATE_FORMAT( CURDATE( ) , '%Y%m' );**

5.获取上个月数据
> **SELECT count(*)  FROM 表名 WHERE PERIOD_DIFF( date_format( now( ) , '%Y%m' ) , date_format( time, '%Y%m' ) ) =1**

敲黑板:PERIOD_DIFF()函数;
获取2个时间点之间的距离,如上距今1个月份,即上个月;用DATE_SUB()函数也可实现,type=MONTH即可


  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL查询是指在一个查询中嵌套另一个查询,内部查询的结果作为外部查询的条件之一。MySQL查询可以用于SELECT、UPDATE、DELETE语句中,可以帮助我们更好地处理复杂的数据查询和操作。 MySQL查询可以分为单行子查询和多行子查询两种类型。单行子查询返回的结果只有一行一列,多行子查询返回的结果有多行多列。 以下是MySQL查询的一些常见用法和示例: 1. 单行子查询 单行子查询返回的结果只有一行一列,可以用于比较操作符、HAVING子句、CASE语句等场景。 比较操作符示例: ```sql SELECT * FROM table1 WHERE column1 = (SELECT column2 FROM table2 WHERE column3 = 'value'); ``` HAVING子句示例: ```sql SELECT column1, COUNT(*) FROM table1 GROUP BY column1 HAVING COUNT(*) > (SELECT COUNT(*) FROM table2); ``` CASE语句示例: ```sql SELECT column1, column2, CASE WHEN column3 = (SELECT MAX(column3) FROM table2) THEN 'max' ELSE 'not max' END FROM table1; ``` 2. 多行子查询 多行子查询返回的结果有多行多列,可以用于比较操作符、相关子查询、相关更新、相关删除等场景。 比较操作符示例: ```sql SELECT * FROM table1 WHERE (column1, column2) IN (SELECT column1, column2 FROM table2 WHERE column3 = 'value'); ``` 相关子查询示例: ```sql SELECT * FROM table1 WHERE column1 IN (SELECT column1 FROM table2 WHERE column2 = 'value'); ``` 相关更新示例: ```sql UPDATE table1 SET column1 = 'new value' WHERE column2 IN (SELECT column2 FROM table2 WHERE column3 = 'value'); ``` 相关删除示例: ```sql DELETE FROM table1 WHERE column1 IN (SELECT column1 FROM table2 WHERE column2 = 'value');```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值