Подсчитайте, сколько строк находится между определенным значением / функцией

#sql #apache-spark-sql

#sql #apache-spark-sql

Вопрос:

Я хочу, чтобы счетчик сбрасывался, когда он видит «LOAN_CASH_IN»

Все еще пытаюсь с window, но не могу найти решение.

 select aux.*, count(1) over (partition by wallet_id
                      order by order_created_at asc)
from aux
  

Ответ №1:

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

 select aux.*, 
       row_number() over (partition by wallet_id, &rp
                          order by order_created_at asc
                         )
from (select aux.*,
             sum(case when order_type_micro = 'LOAN_CASH_IN' then 1 else 0 end) over (partition by wallet_id order by order_created_at) &rp
      from aux
     ) aux;
  

row_number() больше подходит для того, что вы хотите, если вы действительно, действительно не понимаете, почему вы используете count() в качестве накопительной оконной функции.

Комментарии:

1. забавно, вы ответили на мой «скрытый» вопрос. На самом деле я хотел получить среднее значение транзакций, которые пользователь совершает перед запросом кредита. Я использовал count(), потому что моим намерением было агрегировать.