36

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

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

4

5 回答 5

82

今天前3个月:

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

从月初开始:

select * from table where timestamp >= last_day(now()) + interval 1 day - interval 3 month;
于 2013-03-13T21:45:28.283 回答
14

要获取当月的第一天,您可以使用以下命令:

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
于 2013-03-13T22:18:25.647 回答
4

假设您使用的是 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()))))

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

于 2013-03-13T21:54:51.267 回答
3

我知道这是一个老问题,但为了可能节省其他人的时间并总结上述答案,以应对需要 (1) 本月日期和 (2) 前 2 个月日期的情况(在显示数据统计信息时很常见) :

WHERE ((timestamp >= NOW() - DATE_FORMAT(CURDATE(), '%Y-%m-01'))
OR  (timestamp >= DATE_FORMAT(CURDATE(), '%Y-%m-01') - INTERVAL 2 MONTH))
于 2015-07-03T14:19:07.007 回答
-1
WHERE ((timestamp >= NOW() - DATE_FORMAT(CURDATE(), '%Y-%m-01'))
OR  (timestamp >= DATE_FORMAT(CURDATE(), '%Y-%m-01') - INTERVAL 2 MONTH))
于 2021-10-13T10:01:34.693 回答