What you’re looking for is a conditional select… if the count of the current month (3) returns 0 records, you want to select the past month’s (2) records.
This should work, but it’s not optimal (nor tested… there may be some bugs):
SELECT d.*
FROM _tableDates AS d
CROSS JOIN (
SELECT
CASE
WHEN SUM(CASE
WHEN MONTH(_Dates) = MONTH(CURRENT_DATE)
AND YEAR(_Dates) = YEAR(CURRENT_DATE)
THEN 1
ELSE 0 END) > 0
THEN CURRENT_DATE
ELSE CURRENT_DATE - INTERVAL 1 MONTH
END AS dt
FROM _tableDates) AS x
WHERE MONTH(d._Dates) = MONTH(x.dt)
AND YEAR(d._Dates) = YEAR(x.dt)
[SQL] SELECT d.*
FROM _tableDates AS d
CROSS JOIN (
SELECT
CASE
WHEN SUM(CASE
WHEN MONTH(_Dates) = MONTH(CURRENT_DATE)
AND YEAR(_Dates_ = YEAR(CURRENT_DATE)
THEN 1
ELSE 0 END) > 0
THEN CURRENT_DATE
ELSE CURRENT_DATE - INTERVAL 1 MONTH
END AS dt
FROM _tableDates) AS x
WHERE MONTH(d._Dates) = MONTH(x.dt)
AND YEAR(d._Dates_ = YEAR(x.dt)
GROUP BY d.ID
[Err] 1064 - You have an error in your SQL syntax; check
the manual that corresponds to your MySQL server version
for the right syntax to use near 'THEN 1
ELSE 0 END) > 0
THEN CURRENT_DATE ' at line 9
SELECT d.*
FROM _tableDates AS d
CROSS JOIN (
SELECT
CASE
WHEN SUM(CASE
WHEN MONTH(_Dates) = MONTH(CURRENT_DATE)
AND YEAR(_Dates) = YEAR(CURRENT_DATE)
THEN 1
ELSE 0 END) > 0
THEN CURRENT_DATE
ELSE CURRENT_DATE - INTERVAL 1 MONTH
END AS dt
FROM _tableDates) AS x
WHERE MONTH(d._Dates) = MONTH(x.dt)
AND YEAR(d._Dates) = YEAR(x.dt)