#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)
это должно сделать трюк за тебя.