Большой Запрос С Множественным Числом Переходов

# #count #google-bigquery #rolling-computation

Вопрос:

У меня есть эти данныевведите описание изображения здесь, я хочу сделать два скользящих подсчета:

  1. Подсчитайте по каждому (идентификатор,возврат средств) путем прокатки. Когда он превратится в другую комбинацию (идентификатор,возврат) (даже с одним и тем же идентификатором), он будет начинаться с 0
  2. Подсчитайте по каждому идентификатору путем прокрутки.

Я хочу, чтобы результат был следующим:

введите описание изображения здесь

Можете ли вы помочь мне создать запрос? Я пробую это, но у меня ничего не получается…

 SELECT
    date,

    id, 

    refund,

    COUNT(CONCAT(id,refund)) OVER (PARTITION BY rn) AS count_id_refund,

    COUNT(id) OVER (PARTITION BY rn) AS count_id

FROM table1
 

введите описание изображения здесь

Ответ №1:

Вы можете использовать функцию row_number (). Вот мой запрос с некоторыми образцами данных

 with sample as (
    select 1 as id, TRUE  as refund,
    union all select 1, true 
    union all select 1, false 
    union all select 2,true 
    union all select 3,true 
    union all select 3, false 
    union all select 3, false
)

select id,refund,
row_number() over(partition by id order by id) as row_id,
row_number() over(partition by concat(id,refund) order by concat(id,refund)) as row_id_rf  
from sample order by id,refund desc;
 

и в результате получается:

Результат