MySQL:从当月和前3个月返回记录

时间:2013-04-17 22:45:08

标签: mysql date filter

我正在使用PHP / MySQL预订系统,我正在使用Google Line Chart来尝试显示当月以及之前3个月的总销售额。

每个预订都有标准的phpmyadmin“date”格式的日期,所以yyyy:mm:dd。

因此,我希望从4个查询中获得4个结果,每个查询过滤掉某个月并从该月获取每个预订的总和。

我的问题是,如何区分查询中的月份?我将如何构建查询?

2 个答案:

答案 0 :(得分:6)

基于标题:

select * from bookings where MONTH(CURDATE())=MONTH(booking_date);
select * from bookings where MONTH(booking_date) > MONTH(CURDATE()-INTERVAL 3 MONTH) and < MONTH(CURDATE() + INTERVAL 1 MONTH);

对于简单的每月搜索,您可以使用以下内容:

Select * from bookings where MONTHNAME(booking_date)='July' and YEAR(booking_date)=2013;

或者:

Select * from bookings where MONTH(booking_date)=7 and YEAR(booking_date)=2013;

此外,由于你已经有了几个月,你可以这样做(这种方法要求你保留每个月的结束日期表,以补偿闰年):

select * from bookings where booking_date>'2013-06-30' AND booking_date<'2013-08-01';

答案 1 :(得分:1)

首先,原谅我的英语......

我知道这是老线程并且不能发表评论但是,@AbsoluteƵERØ,该答案适用于本月,例如,如果我在2013-2014-2015获得了7月的记录,查询将返回当月的记录那些年....为了避免这种情况并使用你发布的代码:

SELECT * FROM bookings WHERE MONTH(CURDATE()) = MONTH(booking_date) AND YEAR(CURDATE()) = YEAR(booking_date);

注意:如果使用“名称形式”并指定年份没有问题,请执行以下操作:

SELECT * FROM bookings WHERE MONTH(CURDATE()) = MONTH(booking_date) AND YEAR(booking_date) = 2013;