2016-12-02 114 views
1

我需要做一个选择,我可以选择查看当前月份,上个月,1个月前,2个月前,3个月前的结果。MySQL查询获取2个月前的所有行

我发现这个问题:MySQL: Query to get all rows from previous month,但我坚持一个过滤器,将获得2个月前从本月的第一天到最后一天的所有结果。

我试着用这个,但它不工作:

SELECT * FROM table 
AND MONTH(date_created) = MONTH(1 MONTH - INTERVAL 2 MONTH); 
+0

如果日期是使用'date'数据类型存储的,那么您可以使用'select * from table where date_created

回答

1

试试这个:

SELECT * FROM table 
WHERE MONTH(date_created) = MONTH(NOW() - INTERVAL 2 MONTH) 
    AND (
      YEAR(date_created) = YEAR(NOW()) 
     OR 
      YEAR(date_created) = YEAR(NOW() - INTERVAL 2 MONTH) 
    ); 

仅在MySQL PRIOR创造了最近2个月返回的记录。

+0

该解决方案可以从任意**年份选择匹配指定月份的所有匹配行。 http://stackoverflow.com/a/2090235/24378这个答案也根据年份进行过滤。 –

+0

是的,添加了本年度的支票,所以它只返回**最后2个飞蛾**返回数据 – Vikrant

+0

我想和YEAR(InsertedDate)应该是AND YEAR(date_created) – al404IT

0
SELECT * FROM table 
AND MONTH(date_created) = MONTH(DATE_SUB(NOW(),INTERVAL 2 MONTH)) 
+0

请不要发布裸露的代码,也请提供解释代码正在做什么。 –

0

如果你想从2个月前的所有行,然后用逻辑是这样的:

WHERE date_created >= DATE_SUB(DATE_SUB(CURDATE(), 1 - DAY(CURDATE())), INTERVAL 2 MONTH) AND 
     date_created < DATE_SUB(DATE_SUB(CURDATE(), 1 - DAY(CURDATE())), INTERVAL 1 MONTH) 

这是什么做的?首先,它仅将函数应用于表达式的当前日期部分。这允许MySQL在date_created上使用索引(如果可用且适当的话)。

表达式DATE_SUB(CURDATE(), 1 - DAY(CURDATE())只是一种获取每月第一天的方法。

相关问题