Ich muss alle Zeilen in meiner Datenbank auswählen, die im letzten Monat erstellt wurden.
Wenn der aktuelle Monat beispielsweise Januar ist, möchte ich alle Zeilen zurückgeben, die im Dezember erstellt wurden. Wenn der Monat Februar ist, möchte ich alle Zeilen zurückgeben, die im Januar erstellt wurden. Ich habe eine date_created
Spalte in meiner Datenbank, in der das in diesem Format erstellte Datum aufgeführt ist : 2007-06-05 14:50:17
.
SELECT * FROM table WHERE date_created BETWEEN (CURRENT_DATE() - INTERVAL 1 MONTH) AND CURRENT_DATE();
between
schließt die Grenzen ein. Es wird auch das aktuelle Datum enthalten. Warum / wie wird es auf gestern beschränkt sein? Bitte näher erläutern?current_date
es nicht heute ist, sondern ein zufälliges Datum vom Kunden angegeben?Hier ist eine andere Alternative. Angenommen, Sie haben ein indiziertes Feld
DATE
oder ein TypfeldDATETIME
, sollte dies den Index verwenden, da die formatierten Daten vor der Verwendung des Index typkonvertiert werden. Sie sollten dann einerange
Abfrage anstelle einerindex
Abfrage sehen, wenn Sie mit EXPLAIN angezeigt werden .quelle
STR_TO_DATE
um das werfen,DATE_FORMAT
damit es sich immer um Datumsobjekte handelt.Wenn es keine zukünftigen Daten gibt ...
Geprüft.
quelle
Alternativ zur Antwort von Hobodave
Sie könnten dasselbe mit EXTRACT erreichen, indem Sie YEAR_MONTH als Einheit verwenden, sodass Sie das UND nicht benötigen würden, wie folgt:
quelle
YEAR_WEEK
zeitliches Intervall , sodass Sie auf die Antwort von hobodave zurückgreifen müssen, wenn Sie Wochen statt Monate benötigen.Dies sollte alle Datensätze des vorherigen Kalendermonats zurückgeben, im Gegensatz zu den Datensätzen der letzten 30 oder 31 Tage.
quelle
Obwohl die Antwort auf diese Frage bereits ausgewählt wurde, glaube ich, dass die einfachste Abfrage sein wird
quelle
Dies hat bei mir funktioniert (Wählt alle Datensätze aus, die im letzten Monat erstellt wurden, unabhängig davon, an welchem Tag Sie die Abfrage in diesem Monat ausführen.)
quelle
select fields FROM table WHERE date_created LIKE concat(LEFT(DATE_SUB(NOW(), interval 1 month),7),'%');
Dieser kann einen Index nutzen, wenn Ihr date_created indiziert ist, da er keine Transformationsfunktion auf den Feldwert anwendet.
quelle
Hier ist die Abfrage, um die Aufzeichnungen des letzten Monats abzurufen:
Grüße - saqib
quelle
quelle