2 Stimmen

Wie kann ich alle Einträge des letzten Monats auswählen?

Ich habe eine Tabelle mit Einträgen, die ein DATE-Feld haben. Jeder Eintrag hat ein bestimmtes Datum. Ich möchte alle Einträge des letzten Monats auswählen die in der Datenbank registriert sind . Wie?

Ich habe es versucht:

SELECT * 
  FROM registries 
 WHERE reg_date = DATE_FORMAT(MAX(reg_date), "%m")` 

...ohne Erfolg

3voto

Kerry Jones Punkte 21572

Wenn Sie die letzten 30 Tage abfragen möchten, geht das folgendermaßen

SELECT * FROM `registries` 
 WHERE `reg_date` > DATE_SUB( NOW(), INTERVAL 30 DAY )

1voto

Basierend auf der Anfrage von OMG Ponies mit Korrekturen:

SELECT 
  r.*
FROM 
  registries AS r
JOIN (
  SELECT 
    MAX(t.reg_date) AS max_date
  FROM 
    registries AS t) AS t 
ON DATE_FORMAT(t.max_date, '%Y-%m') = DATE_FORMAT(r.reg_date, '%Y-%m')

Allerdings wäre die Leistung der Abfrage nicht besonders gut, da sie den JOIN auf zwei berechnete Werte anwenden würde. Ich glaube, es kann immer noch anständig durchführen, es sei denn, Sie beginnen, Millionen von Datensätzen zu treffen.

Andererseits könnten Sie die Abfrage wahrscheinlich schneller durchführen, wenn Sie zuerst nach dem MAX(reg_date)

SELECT 
  CONCAT(DATE_FORMAT(MAX(r.reg_date), "%Y-%m"), '-01') AS first_day
FROM 
  registries AS r

Und dann wird das Ergebnis in eine Abfrage eingefügt:

SELECT 
  r.*
FROM 
  registries AS r
WHERE
  r.reg_date BETWEEN '<first_day>' AND LAST_DAY('<first_day>')

Mit first_day als Platzhalter für das vorherige Abfrageergebnis. Vorausgesetzt, Sie haben reg_date indiziert, sollte dies ziemlich schnell gehen.

Hinweis: LAST_DAY ist eine reine MySQL-Funktion.

0voto

Muleskinner Punkte 13537

So erhalten Sie alle Datensätze für den letzten Monat (Mai):

SELECT [col,] DATEDIFF(TIMESTAMP, 2010-05-01 00:00) dif1, DATEDIFF(ZEITSTEMPEL, 2010-05-31 00:00) dif2 FROM tablename HAVING dif1 >= 0 AND dif2 <= 0

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X