仅在MySQL中返回最近3个月的记录
问题描述:
我有一个带有时间戳记字段的表。我如何获得最近3个月的数据?仅在MySQL中返回最近3个月的记录
特别是,3月是我当前的月假设,03/2012。我只需要返回3月,2月和1月的记录。在今天之前
答
三个月:
select * from table where timestamp >= now()-interval 3 month;
开始第一个月:
select * from table where timestamp >= last_day(now()) + interval 1 day - interval 3 month;
答
假设你正在使用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
答
要获得当月的第一天,你可以这样做:
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)从当前的月份和日期的情况下,(2 )日期从之前2个月(共同显示在数据统计):
WHERE ((timestamp >= NOW() - DATE_FORMAT(CURDATE(), '%Y-%m-01'))
OR (timestamp >= DATE_FORMAT(CURDATE(), '%Y-%m-01') - INTERVAL 2 MONTH))
@StephenKloder:能否请你解释查询这里有什么用of'interval1天“? – kreya 2015-01-06 10:11:53