仅在MySQL中返回过去3个月的记录

时间:2013-03-13 21:40:10

标签: mysql

我有一个带有时间戳字段的表。我如何获取过去3个月的数据?

特别是,3月是我当前的月份,比如 03/2012 。我需要从3月,2月和1月份返回记录。

4 个答案:

答案 0 :(得分:59)

今天前3个月:

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

从月初开始:

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

答案 1 :(得分:10)

要获得当月的第一天,您可以使用:

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

答案 2 :(得分:2)

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

如果您需要整整三个月,可以从今天开始减去3个月:DATEADD(m,-3,getdate())

但是,正如您所说,您只需要1月,2月和3月的数据。您必须根据今天的日期进行一些计算: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()))))

---编辑--- 呃,我刚注意到“mysql”标签......你可以在这里获得有关MySQL日期函数的更多信息:https://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html

答案 3 :(得分:1)

我知道这是一个古老的问题,但是可能为了需要(1)当前月份的日期和(2)前2个月的日期(显示时常见)可能节省其他时间并总结上述答案数据统计):

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