Замена / эквивалент «over (partition by ..)» для более старой версии 5.5.60 MariaDB - PullRequest
0 голосов
/ 11 февраля 2020

Есть ли возможность переписать предложение « over (partition by ..)» в приведенном ниже сценарии для более старой версии 5.5.60 из MariaDB, пожалуйста? Этот сценарий подходит для более новой версии. Как бы это предложение не использовалось (не выполнялось) для MariaDB-5.5.60

select
    a.year,
    a.company,
    b.dt,
    case 
        when a.year = 2018 
            then sum(b.quantity)
        when a.year = 2020
            then sum(b.quantity) 
                - sum(case when a.year = 2018 then sum(b.quantity) else 0 end) 
                  over(partition by a.company, b.dt)
    end quantity
from taba a
inner join tabb b on b.id = a.id
group by
    a.year,
    a.company,
    b.dt

Кто-нибудь знает какой-нибудь обходной путь для этого предложения?

Я хотел бы будьте благодарны за исправление упомянутого скрипта для более старой версии MariaDB.

1 Ответ

0 голосов
/ 12 февраля 2020

Поскольку оконные функции были введены в MarieDB 10.2.0 , рассмотрите возможность объединения в агрегированный подзапрос, чтобы приравнять условный вызов SUM() OVER().

select
    a.year,
    a.company,
    b.dt,
    case 
        when a.year = 2018 
            then sum(b.quantity)
        when a.year = 2020
            then sum(b.quantity) - sub.calc_qty
    end quantity
from taba a
inner join tabb b on b.id = a.id
inner join 
   (select sub_a.company, sub_b.dt,
           sum(case
                    when sub_a.year = 2018
                    then sub_b.quantity
                    else 0     
               end) as calc_qty
    from taba sub_a
    inner join tabb sub_b on sub_b.id = sub_a.id
    group by sub_a.company, sub_b.dt
   ) sub
 on sub.company = a.company 
 and sub.dt = b.dt

group by
    a.year,
    a.company,
    b.dt
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...