СЛУЧАЙ, КОГДА случай в BigQuery сравнивает значение в одном и том же поле

# #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