SQL-запрос - форматировать данные из той же таблицы - PullRequest
1 голос
/ 15 апреля 2019

У меня очень большой запрос, который возвращает данные в следующем формате:

ID           ACTION                    DATE
----------------------------------------------------------
1            RUN                       2018-02-15
1            ACTION 1                  2018-02-10
1            ACTION 2                  2018-02-01
1            RUN                       2018-02-02
1            RUN                       2018-02-03
1            RUN                       2018-02-11
1            RUN                       2018-02-13
2            RUN                       2018-02-15
2            ACTION 1                  2018-02-10
2            ACTION 2                  2018-02-05
2            RUN                       2018-02-02
2            RUN                       2018-02-03
2            RUN                       2018-02-11
2            RUN                       2018-02-13

Я должен использовать этот запрос в качестве подзапроса и получить такие данные:

ID           RUNS_AFTER_ACTION_1                RUNS_AFTER_ACTION_2
----------------------------------------------------------------------
1            3                                  5
2            3                                  3

По существу, Действие 1 и Действие 2 определяют пределы, которые мне нужны, чтобы знать, сколько прогонов в каждом идентификаторе после выполнения Действие 1 и Действие 2.

1 Ответ

4 голосов
/ 15 апреля 2019

Вы можете использовать оконные функции и условное агрегирование:

select id,
       sum(case when action = 'RUN' and date > action1_date then 1 else 0 end) as RUNS_AFTER_ACTION_1,
       sum(case when action = 'RUN' and date > action2_date then 1 else 0 end) as RUNS_AFTER_ACTION_2
from (select t.*,
             max(case when action = 'ACTION 1' then date end) over (partition by id) as action1_date,
             max(case when action = 'ACTION 2' then date end) over (partition by id) as action2_date
      from t
     ) t
group by id;
...