我在配置单元代码方面遇到了一些问题。
我的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 *
空了。请帮忙。
答案 0 :(得分:1)
据我了解,您正在尝试获取给定日期的上个月的数据。如果是这样,您可以使用内置的日期函数来做到这一点。
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}')
该解决方案假定年,月和日的格式为yyyy,MM和dd。如果没有,请根据需要进行调整
此外,即使已将date
按年,月和日进行分区,也应考虑将其存储为列。