sql redshift casewhen дата = текущий месяц

#sql #date

#sql #Дата

Вопрос:

Я пытаюсь написать случай, когда месяц и год в поле даты (move_in_month) равны текущему месяцу / году. Я написал:

   when date_part(m,temp.move_in_month) = date_part(m,getdate()) and date_part(y,temp.move_in_month) = date_part(y,getdate()) and engagement_rate <= .4 then 'Flag' 
  else 'No Flag' end as low_use_yn
  

а также попробовал несколько других вариантов, но это не работает. Мысли? Спасибо!

Ответ №1:

Я бы использовал date_trunc() :

 date_trunc('month', temp.move_in_month) = date_trunc('month', CURRENT_DATE)
  

Redshift не поддерживает индексы, но если move_in_month это ключ разделения, то это может быть безопаснее:

 temp.move_in_month >= date_trunc('month', CURRENT_DATE) and
temp.move_in_month < date_trunc('month', CURRENT_DATE)   interval '1 month'
  

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

1. Хорошо, у меня есть case when date_trunc('month', temp.move_in_month) = date_trunc('month',now()) and date_trunc('year', temp.move_in_month) = date_trunc('year',now()) and engagement_rate <= .4 then 'Flag' else 'No Flag' end as low_use_yn и я получаю недопустимую операцию: указанные типы или функции (по одному на информационное сообщение) не поддерживаются в таблицах Redshift.;

2. @aks85 . . . Да? Почему вы используете date_trunc() как для года, так и для месяца? Реальная проблема в том, now() что более стандартный CURRENT_DATE вариант более уместен.

3. да, переключил его на current_date — все исправлено, спасибо!

Ответ №2:

В итоге получилось:

   case
      when date_trunc('month', temp.move_in_month) = date_trunc('month',current_date)
        and date_trunc('year', temp.move_in_month) = date_trunc('year',current_date)
        and engagement_rate <= .4 then 'Flag'
      else 'No Flag' end as low_use_yn
  

Решение найдено!