仅在MySQL中返回最近3个月的记录

unftdfkk  于 2023-03-22  发布在  Mysql
关注(0)|答案(8)|浏览(202)

我有一个带有时间戳字段的表。如何获取过去3个月的数据?
特别是,三月是我的当前月份,比如说,03/2012。我只需要返回三月,二月和一月的记录。

2eafrhcq

2eafrhcq1#

三个月前:

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

从每月的第一天开始:

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

neskvpey2#

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

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
lsmd5eda

lsmd5eda3#

我知道这是一个老问题,但为了可能保存其他人的时间,并总结上述答案,以满足以下情况:(1)当前月份的日期和(2)前2个月的日期(显示数据统计时常见):

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

yruzcnhs4#

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

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

w8f9ii69

w8f9ii695#

另一种可能性是:

SELECT * WHERE your_date_column > LAST_DAY(CURRENT_DATE - INTERVAL 3 MONTH);
bogh5gae

bogh5gae6#

使用此代码在这里获得前3个月从某一日期

SELECT * FROM table WHERE date_column>= DATE_FORMAT(current_date(), '%Y-%m-01') - INTERVAL 3 MONTH and date_column< DATE_FORMAT(current_date(), '%Y-%m-01')
55ooxyrt

55ooxyrt7#

select metric,MONTH(Created) as month,YEAR(Created) as year
from table
where metric = value
AND ( ( YEAR(Created) = YEAR(NOW()) AND DATE(Created) >= DATE(NOW() - INTERVAL :month MONTH) )
   OR ( Year(Created) = YEAR(NOW()) - 1 AND Month(Created) > MONTH(INTERVAL :month MONTH + NOW()) ) )
order by Created;

Mysql查询显示最近X个月的数据。
注意:如果X〉12,则此查询将不起作用

j2datikz

j2datikz8#

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

相关问题