2016-12-02 61 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())只是一種獲取每月第一天的方法。

相關問題