Based sur la requête de OMG Ponies avec des corrections:
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')
Bien que les performances de la requête ne serait pas excellent, car il exploiterait le JOIN sur deux valeurs calculées. Je crois qu'il peut encore fonctionner décemment, sauf si vous commencez à battre des millions d'enregistrements.
D'un autre côté, vous pourriez probablement exécuter plus rapidement en questionnant d'abord pour le MAX (reg_date)
SELECT
CONCAT(DATE_FORMAT(MAX(r.reg_date), "%Y-%m"), '-01') AS first_day
FROM
registries AS r
Et puis en injectant le résultat dans une requête:
SELECT
r.*
FROM
registries AS r
WHERE
r.reg_date BETWEEN '<first_day>' AND LAST_DAY('<first_day>')
Avec first_day comme un espace réservé pour le résultat de la requête précédente. Si vous avez indexé reg_date, cela devrait fonctionner assez vite.
Remarque: LAST_DAY est une fonction MySQL uniquement.
Le dernier mois civil? Les 30 derniers jours? –