Как использовать условие фильтра для функций Windows в SQL

#sql #scala #hive #apache-spark-sql #bigdata

Вопрос:

Источник:

 AccNo   Amt     Date    
1       0       2/02/2021
1       200     2/02/2021
1       300     3/02/2021
2       400     1/03/2021
2       500     1/04/2021
 

Ожидаемая цель:

 AccNo   Amt     Date        no_of_times_non_0_past_week no_of_times_non_0_past_month    
1       0       2/02/2021   0                           0       
1       200     2/02/2021   0                           0       
1       300     3/02/2021   1                           1       
2       400     1/03/2021   0                           2       
2       500     1/04/2021   0                           1   
 

Нужно проверить, сколько раз сумма была 0 на прошлой неделе и в прошлом месяце и так далее.

В настоящее время я использую функции Windows для агрегирования по диапазонам(прошедшая неделя,прошедший месяц и т. Д.). количество(amt) превышено (разбиение по порядку в соответствии с диапазоном дат между 7 предыдущими и текущими строками)

Теперь проверяю, можем ли мы добавить фильтр с суммой, отличной от нуля, чтобы я мог рассчитывать на основе этого фильтра.

Можем ли мы использовать фильтр в дополнение к функции Windows? количество(amt) больше (разбиение по порядку accNo по диапазону дат между 7 предыдущими и текущими строками), где amt<> 0 ??

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

1. да, вы можете использовать этот фильтр, ГДЕ amt<> 0. В чем проблема?

2. Вы можете попробовать что-то вроде этого count(case when amt>0 then 1 end) over (partition by accNo order by Date rows between 7 preceding and current row)

3. @AnotherDayAnotherData приятно это слышать . Добавляю это в качестве ответа, так как предложение сработало для вас.

Ответ №1:

count(case when amt>0 then 1 end) over (partition by accNo order by Date rows between 7 preceding and current row)

это должно сделать трюк за тебя.