Как получить данные за последний месяц из таблицы на основе текущего месяца и года? - PullRequest
0 голосов
/ 30 марта 2019

У меня проблема с кодом улья.Мой FROM TABLE разделен на месяц, год и день.Я придумал следующий код, чтобы получить нужные мне данные.Логика выглядит примерно так: если текущий mth равен 01, измените month на 12, а год на yr - 1, измените месяц на mth - 1 и оставьте год таким, как есть.

set hivevar:yr=2019;
set hivevar:mth=03;
set hivevar:dy=29;

SELECT * from 
FROM table
WHERE 
month = case when cast('${mth}' as int) = 01 then 12 else cast((cast('${mth}' as int) - 1) as string) end
AND year = case when cast('${mth}' as int) = 01 then cast((cast('${yr}' as int) - 1) as string) else '${yr}' end;

Это не работает, мой select * становится пустым.Пожалуйста, помогите.

desc table table

1 Ответ

1 голос
/ 30 марта 2019

Из того, что я понимаю, вы пытаетесь получить данные за предыдущий месяц с указанием даты. Если это так, вы можете использовать встроенные функции даты, чтобы сделать это.

select *
from table 
where concat_ws('-',year,month,day) >= add_months(date_add(concat_ws('-','${yr}','${mth}','${dy}'),1-'${dy}'), -1) 
and concat_ws('-',year,month,day) < date_add(concat_ws('-','${yr}','${mth}','${dy}'),1-'${dy}') 

Решение предполагает, что год, месяц и день имеют формат гггг, мм и дд. Если нет, отрегулируйте их при необходимости

Кроме того, вам следует рассмотреть вопрос о сохранении date в виде столбца, даже если он разбит на год, месяц и день.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...