MySQL присоединиться слева порядок по дате - PullRequest
0 голосов
/ 10 ноября 2019

У меня просто есть таблица 'chart', которой нужен запрос, чтобы упорядочить вывод для какой-либо цели построения графика.

select fecha1,COALESCE(data,0) as qty

from

    (
        select DATE_FORMAT(date,'%m/%Y') as fecha1
        from charts 
        where project_code='CEU92'
        group by year(date),month(date)
    )

as table1

left join

    (
        select DATE_FORMAT(date,'%m/%Y') as fecha2,zone, sum(qty) as data
        from charts
        where project_code='CEU92' and zone='Muro transformadores'
        group by year(date),month(date)
    )

as table2 on table2.fecha2 = table1.fecha1

Подзапрос таблицы 1:

| fecha1  |
| 08/2016 |
| 09/2016 |
| 10/2016 |
| 11/2016 |
| 12/2016 |
| 01/2017 |
| 02/2017 |
| 03/2017 |
| 08/2017 |
...........
| 04/2019 |
| 05/2019 |
| 06/2019 |
| 07/2019 |
| 08/2019 |
| 09/2019 |
| 10/2019 |
| 11/2019 |

Таблица 2подзапрос выглядит так:

 fecha2         zone            data
| 04/2019 | Muro Transformadores |  39   |
| 05/2019 | Muro Transformadores |  44   |
| 06/2019 | Muro Transformadores |  94   |
| 07/2019 | Muro Transformadores |  20   |
| 08/2019 | Muro Transformadores |  168.5|
| 09/2019 | Muro Transformadores |  935  | 
| 10/2019 | Muro Transformadores |  1762 |
| 11/2019 | Muro Transformadores |  157.5|

Результат запроса lef join выглядит так:

 fecha1    qty
| 04/2019 | 39
| 05/2019 | 44
| 06/2019 | 94
| 07/2019 | 20
| 08/2019 | 168.5
| 09/2019 | 935
| 10/2019 | 1762
| 11/2019 | 157.5
| 08/2016 | 0
| 09/2016 | 0
| 10/2016 | 0
| 11/2016 | 0
| 12/2016 | 0
| 01/2017 | 0
| 02/2017 | 0
| 03/2017 | 0
| 04/2017 | 0

Мне нужен порядок таблицы результатов по fecha1

Я попытался добавить в конец предложения:

order by table1.fecha1 и результат становится еще более запутанным

Этот фрагмент прекрасно работает в Mariadb, но не работаетСформируйте меня в 'mysql'

Есть предложения?

Ответы [ 2 ]

1 голос
/ 10 ноября 2019

Если вы установите формат даты в формате ГГГГ-ММ, это будет легко:

select fecha1,COALESCE(data, 0) as qty
from (select DATE_FORMAT(date,'%Y-%m') as fecha1
      from charts 
      where project_code = 'CEU92'
      group by DATE_FORMAT(date,'%Y-%m')
     ) table1 left join
     (select DATE_FORMAT(date, '%Y-%m') as fecha2, zone, sum(qty) as data
      from charts
      where project_code = 'CEU92' and zone = 'Muro transformadores'
      group by DATE_FORMAT(date, '%Y-%m'), zone
     ) table2
     on table2.fecha2 = table1.fecha1
order by table1.fecha1;

Однако условное агрегирование, вероятно, является более простым подходом:

select DATE_FORMAT(date, '%m/%Y') as fecha2,
       'Muro transformadores' as zone,
       sum(case when zone = 'Muro transformadores' then qty end) as data
from charts
where project_code = 'CEU92' 
group by DATE_FORMAT(date, '%m/%Y')
order by min(date);

Iвсе еще предпочитаю YYYY-MM, но это альтернатива.

0 голосов
/ 10 ноября 2019

Почему два подзапроса?:

SELECT 
    DATE_FORMAT(c1.fecha1,'%m/%Y'),
    COALESCE(c2.data,0) as qty
FROM charts c1
LEFT JOIN charts c2 ON 
    c2.date = c1.date 
    AND c2.project_code=c1.project_code 
    AND c2.zone='Muro transformadores'
WHERE 
    project_code='CEU92'
GROUP BY 
    year(fetcha1),month(fetcha1)
ORDER BY 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...