2013-03-13 48 views

回答

40

三个月:

select * from table where timestamp >= now()-interval 3 month; 

开始第一个月:

select * from table where timestamp >= last_day(now()) + interval 1 day - interval 3 month; 
+1

@StephenKloder:能否请你解释查询这里有什么用of'interval1天“? – kreya 2015-01-06 10:11:53

1

假设你正在使用SQL Server(Oracle,MySQL等和其他有类似的日期函数),你可以使用dateadd函数来添加或减去当前日期的时间间隔。

如果你想了整整三个月,你可以从今天减去3月:DATEADD(m,-3,getdate())

但是,你的状态,你只想从一月,二月和三月的数据。你必须要基于今天的日期一些计算:dateadd(m,-2, CONVERT(datetime, CONVERT(VARCHAR(2), MONTH(getdate())) + '/01/' + CONVERT(VARCHAR(4), YEAR(getdate()))))

而在最后,得到这样

SELECT fields 
FROM table 
WHERE timestampfield > DATEADD(m,-2, CONVERT(datetime, CONVERT(VARCHAR(2), MONTH(getdate())) + '/01/' + CONVERT(VARCHAR(4), YEAR(getdate())))) 

---编辑--- ERF,我只注意到了“MySQL的”标签查询......你可以在MySQL日期函数的详细信息在这里:https://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html

7

要获得当月的第一天,你可以这样做:

DATE_FORMAT(CURDATE(), '%Y-%m-01') 

如果当前日期是2013-03-13,它将返回2013-03-01,我们可以仅从此日期减去2个月获得2013-01-01。您的查询可能是这样的:

SELECT * 
FROM yourtable 
WHERE data >= DATE_FORMAT(CURDATE(), '%Y-%m-01') - INTERVAL 2 MONTH 
1

我知道这是一个老问题,但可能拯救别人的时间和总结上述答案最多的需要(1)从当前的月份和日期的情况下,(2 )日期从之前2个月(共同显示在数据统计):

WHERE ((timestamp >= NOW() - DATE_FORMAT(CURDATE(), '%Y-%m-01')) 
OR (timestamp >= DATE_FORMAT(CURDATE(), '%Y-%m-01') - INTERVAL 2 MONTH))