2016-12-02 1 views
1

Ich muss eine Auswahl treffen, wo ich wählen kann, um Ergebnisse für den aktuellen Monat, vorherigen Monat, vor 1 Monat, 2 Monaten, 3 Monaten zu sehen.MySQL Query, um alle Zeilen für 2 Monate zu erhalten

Ich fand diese Frage: MySQL: Query to get all rows from previous month, aber ich bin fest mit einem Filter, der mir alle Ergebnisse seit 2 Monaten vom ersten bis letzten Tag des Monats erhalten wird.

ich damit versucht, aber es funktioniert nicht:

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

Wenn das Datum gespeichert ist, mit 'date' Datentyp, dann können Sie verwenden als' select * from table where date_created

Antwort

1

Try this:

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) 
    ); 

Rückkehr Aufzeichnungen vor den letzten 2 Monaten erstellt nur in MySQL.

+0

Diese Lösung kann alle übereinstimmenden Zeilen auswählen, die mit dem angegebenen Monat aus ** jedem ** Jahr übereinstimmen. http://StackOverflow.com/a/2090235/24378 Diese Antwort filtert auch basierend auf dem Jahr. –

+0

Yup, hinzugefügt Check des aktuellen Jahres so, es gibt nur die letzten 2 Motten ** zurück Daten – Vikrant

+0

Ich denke, UND Jahr (InsertedDate) sollte UND JAHR sein (date_created) – al404IT

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

Bitte poste nicht bare code, auch eine Erklärung dafür, was der Code tut. –

0

Wenn Sie alle Zeilen von 2 Monaten wollen, dann Logik wie folgt verwenden:

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) 

Was ist dies zu tun? Zuerst werden nur Funktionen auf den aktuellen Datumsteil des Ausdrucks angewendet. Dadurch kann MySQL einen Index für date_created verwenden, sofern verfügbar und angemessen. Der Ausdruck DATE_SUB(CURDATE(), 1 - DAY(CURDATE()) ist einfach eine Möglichkeit, den ersten Tag des Monats zu erhalten.

Verwandte Themen