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.