如何根据当前月份和年份从表中获取上个月的数据?

时间:2019-03-29 22:14:29

标签: sql hive hiveql

我在配置单元代码方面遇到了一些问题。 我的FROM TABLE是根据月,年和日进行分区的。我想出了以下代码来获取所需的数据。逻辑类似于如果当前的mth01,然后将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 个答案:

答案 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按年,月和日进行分区,也应考虑将其存储为列。