HIVE SQL за последние X недель, когда он пересекает больше года

Я искал, но не смог найти решение для Улей и был бы признателен за любой ввод.

У меня есть требование запустить данные за последние 5 недель. Так что я использую

concat(year(current_date), weekofyear(current_date))-6 

а также

concat(year(current_date), weekofyear(current_date))-1 

но, конечно, когда это дойдет до января, это не сработает.

У меня изначально было так, потому что я также запрашиваю данные прошлой недели, которые будут работать в январе, поскольку 201901 все еще больше, чем 201852. Но если я сделаю промежуточный код в приведенном выше коде, в январе 2019 года я не получу последние 5 недель данных.

ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
0
94
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Не придумывайте свидания! Просто используйте date_sub():

where datecol >= date_sub(current_date, 5 * 7)

Спасибо! Это хорошее предложение, но, если я правильно понимаю, это сработает, только если я запрошу запрос в понедельник, верно? Я использовал weekofyear, чтобы в любой день недели можно было выполнить запрос.

Sir_Joseph 13.09.2018 18:07

Итак, я нашел 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) Я просто до сих пор не уверен, что произойдет в январе.

Sir_Joseph 13.09.2018 19:45

Код @ Gordons будет работать без использования hive> select date_sub('2017-01-01', 5 * 7) from temp.emp limit 1; OK 2016-11-27

Gaurang Shah 13.09.2018 20:00

Спасибо вам обоим! Я очень ценю это. Вот что я в итоге сделал: получил дату на X недель в прошлом, а вдобавок мне нужно было получить первый день недели, который дает мне воскресенье, и я добавил дату, чтобы получить понедельник. Итак, полное заявление, которое нужно получить за последние 5 недель или на 5 недель вперед: round(avg(case when forecast.week_begin between date_add(date_sub(current_Date,pmod(datediff(current_date,'1‌​900-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))

Sir_Joseph 13.09.2018 20:24

Другие вопросы по теме