# #google-bigquery #conditional-statements #case
Вопрос:
Мне нужна ваша помощь в большом запросе. Я пытаюсь сделать СЛУЧАЙ, когда в одном поле используется несколько условий. Вот данные:
В этом случае я хочу иметь один агрегированный вывод, который говорит ПРАВДУ, когда «Воскресший» тип movement_type происходит ПОСЛЕ «Сбитого» типа movement_type на основе его ключа month_key (независимо от промежутка между ними).
Итак, исходя из этих данных, я хочу, чтобы вывод был:
---------- -----------
| group_id | condition |
---------- -----------
| A12345 | TRUE |
---------- -----------
Я пробовал использовать СВИНЕЦ, но не смог найти правильный ответ. Спасибо.
Ответ №1:
хотите иметь один агрегированный вывод, который говорит ПРАВДУ, когда «Воскресший» тип movement_type происходит ПОСЛЕ «Сбитого» типа movement_type на основе его ключа month_key
Просто используйте агрегацию:
select group_id,
(max(case when movement_type = 'Resurrected' then month_key end) >
max(case when movement_type = 'Churned' then month_key end)
) as flag
from t
group by group_id;
Ответ №2:
Рассмотрим следующий подход
select group_id, logical_or(flag) as condition
from (
select group_id,
countif(movement_type = 'Churned') over prev_rows > 0
and movement_type = 'Resurrected' as flag
from `project.dataset.table`
window prev_rows as (partition by group_id order by month_key)
)
group by group_id