Вы также можете сделать это без создания хранимой процедуры, временной таблицы, вставки во временную таблицу и удаления хранимой процедуры после
Используя генератор чисел в коде MySQL.
Запрос
SELECT
MONTH(NOW() - INTERVAL number_generator.number MONTH) AS `month`
, YEAR(NOW() - INTERVAL number_generator.number MONTH) AS `year`
FROM (
SELECT
(@NUMBER := @NUMBER + 1) AS number
FROM (
SELECT 1 AS number UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9 UNION SELECT 10
) AS records_1
CROSS JOIN (
SELECT 1 AS number UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9 UNION SELECT 10
) AS records_2
CROSS JOIN (SELECT @NUMBER := 0) AS init_user_params
) AS number_generator
WHERE
number_generator.number BETWEEN 1 AND 12
AND
MONTH(NOW()) <> MONTH(NOW() - INTERVAL number_generator.number MONTH)
ORDER BY
YEAR(NOW() - INTERVAL number_generator.number MONTH) ASC
, MONTH(NOW() - INTERVAL number_generator.number MONTH) ASC
Результаты
| month | year |
|-------|------|
| 10 | 2017 |
| 11 | 2017 |
| 12 | 2017 |
| 1 | 2018 |
| 2 | 2018 |
| 3 | 2018 |
| 4 | 2018 |
| 5 | 2018 |
| 6 | 2018 |
| 7 | 2018 |
| 8 | 2018 |
см. Демонстрацию http://sqlfiddle.com/#!9/340e01/584
Обратите внимание, что если вы используете MySQL 8.0+, синтаксис более понятен при использовании общих табличных выражений.
Запрос
WITH RECURSIVE number_generator (number) AS
(
SELECT 1 AS number
UNION ALL
SELECT number + 1 FROM number_generator WHERE number < 12
)
SELECT
MONTH(NOW() - INTERVAL number_generator.number MONTH) AS `month`
, YEAR(NOW() - INTERVAL number_generator.number MONTH) AS `year`
FROM
number_generator
WHERE
MONTH(NOW()) <> MONTH(NOW() - INTERVAL number_generator.number MONTH)
ORDER BY
YEAR(NOW() - INTERVAL number_generator.number MONTH) ASC
, MONTH(NOW() - INTERVAL number_generator.number MONTH) ASC
Результаты
| month | year |
|-------|------|
| 10 | 2017 |
| 11 | 2017 |
| 12 | 2017 |
| 1 | 2018 |
| 2 | 2018 |
| 3 | 2018 |
| 4 | 2018 |
| 5 | 2018 |
| 6 | 2018 |
| 7 | 2018 |
| 8 | 2018 |
см. Демонстрацию https://www.db -fiddle.com / f / chJ4qS2ocXS79vGkFBg7PR / 13