Я искал, но не смог найти решение для Улей и был бы признателен за любой ввод.
У меня есть требование запустить данные за последние 5 недель. Так что я использую
concat(year(current_date), weekofyear(current_date))-6
а также
concat(year(current_date), weekofyear(current_date))-1
но, конечно, когда это дойдет до января, это не сработает.
У меня изначально было так, потому что я также запрашиваю данные прошлой недели, которые будут работать в январе, поскольку 201901 все еще больше, чем 201852. Но если я сделаю промежуточный код в приведенном выше коде, в январе 2019 года я не получу последние 5 недель данных.
Не придумывайте свидания! Просто используйте date_sub()
:
where datecol >= date_sub(current_date, 5 * 7)
Итак, я нашел stackoverflow.com/questions/33196651/…, где обсуждается, как получить первый день недели, затем я взял ваш фрагмент, а затем добавил дату, чтобы получить понедельник, который является моим первым днем недели. (Удивительно, но cast'u 'и функция pmod возвращают воскресенье как первый день недели, а weekofyear возвращает понедельник), date_Add(date_sub(date_sub(current_date, 1 * 7),pmod(datediff(date_sub(current_date, 1 * 7),'1900-01-07'),7)),1)
Я просто до сих пор не уверен, что произойдет в январе.
Код @ Gordons будет работать без использования hive> select date_sub('2017-01-01', 5 * 7) from temp.emp limit 1; OK 2016-11-27
Спасибо вам обоим! Я очень ценю это. Вот что я в итоге сделал: получил дату на X недель в прошлом, а вдобавок мне нужно было получить первый день недели, который дает мне воскресенье, и я добавил дату, чтобы получить понедельник. Итак, полное заявление, которое нужно получить за последние 5 недель или на 5 недель вперед: round(avg(case when forecast.week_begin between date_add(date_sub(current_Date,pmod(datediff(current_date,'1900-01-07'),7)),1) and date_add(date_sub(date_add(current_date, 4 * 7),pmod(datediff(date_add(current_date, 4 * 7),'1900-01-07'),7)),1) then sales_Forecast end))
Спасибо! Это хорошее предложение, но, если я правильно понимаю, это сработает, только если я запрошу запрос в понедельник, верно? Я использовал weekofyear, чтобы в любой день недели можно было выполнить запрос.