MYSQL выбирает запрос, возвращающий список месяцев в виде строки между датой начала и окончания с восходящим порядком месяца и года.

Для этого вопроса (MYSQL выбирает запрос, возвращающий список месяцев в виде строки между датой начала и окончания) Я нашел решение запроса, оно дает правильный результат, НО мне нужен список месяцев в порядке возрастания.

Table : Contracts
------------------------------
ID | START      | END        |
------------------------------
1  | 2016-05-01 | 2016-07-31 |
2  | 2016-04-01 | 2016-08-31 |
3  | 2016-01-22 | 2016-02-25 |
4  | 2016-06-15 | 2017-11-30 |
------------------------------

Здесь мне нужен результат в соответствии с приведенным ниже форматом, одно дополнительное поле, которое представляет диапазон/список месяцев между датой начала и датой окончания контракта с использованием запроса SELECT.

Result (as per give format)
----------------------------------------------------------------------------------------
ID | START      | END        | Description      
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
1  | 2016-05-01 | 2016-07-31 | May-2016, Jun-2016, July-2016
2  | 2016-04-01 | 2016-07-31 | April-2016, May-2016, Jun-2016, July-2016
3  | 2016-01-22 | 2016-02-25 | January-2016, February-2016
3  | 2016-06-15 | 2017-11-30 | May-2017 ,November-2016 ,June-2016 ,August-2017 ,March-2017 ,July-2016 ,October-2016 ,November-2017 ,June-2017 ,February-2017 ,September-2016 ,September-2017 ,August-2016,April-2017 ,January-2017 ,July-2017 ,December-2016 ,October-2017
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

SQL-запрос:

    Select id, DATE_FORMAT(start_Date, '%Y-%c-%d') as Start_Date,
           DATE_FORMAT(end_date,'%Y-%c-%d') as END_Date,
           group_concat( distinct(DATE_FORMAT(aDate, '%M %Y'))) as Descp
    from (
         select ss.end_date - interval (a.a ) month as aDate from
         (select 0 as a union all select 1 union all select 2 union all select 3
         union all select 4 union all select 5 union all select 6 union all
         select 7 union all select 8 union all select 9) a, Contracts ss 
         ) mon, Contracts sa
    where aDate between sa.start_date and sa.end_date
    group by id;



It give result randomly like result ie,

 "May-2017 ,November-2016 ,June-2016 ,August-2017 ,March-2017 ,July-2016 ,October-2016 ,November-2017 ,June-2017 ,February-2017 ,September-2016 ,September-2017 ,August-2016,April-2017 ,January-2017 ,July-2017 ,December-2016 ,October-2017"

Но мне нужно

"June-2016 ,July-2016 ,August-2016,September-2016,October-2016, November-2016 ,December-2016 ,January-2017 ,February-2017 ,March-2017 ,April-2017 ,May-2017 ,June-2017 ,July-2017 ,August-2017 ,September-2017 ,October-2017, November-2017
"

Пожалуйста, помогите мне найти решение о приведенном выше результате,


person Divyesh K    schedule 15.06.2016    source источник
comment
Если я вас правильно понял, вы можете просто добавить order by внутри своего group_concat, например. group_concat(distinct(DATE_FORMAT(aDate, '%M %Y')) order by year(adate), month(adate)).   -  person Solarflare    schedule 15.06.2016
comment
Приятно видеть, что данные выходят из запроса таким образом, а не хранятся таким образом в таблице: p   -  person Drew    schedule 15.06.2016