#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
Решение найдено!