如何从hive表中获取月=当前月else月=上个月(当前月–1)的记录?

okxuctiv  于 2021-06-25  发布在  Hive
关注(0)|答案(2)|浏览(981)

我遇到一种情况,需要从配置单元表中检索数据,其中month=current month。如果当前月份的数据不可用,我需要从上个月获取。如何在配置单元查询中实现这种情况。
我的问题对吗?

Select emp_name, emp_number,
case when emonth IS NULL then concat(year(current_date()),'-' ,month(current_date())-1) else emonth end
FROM db.emptable
where emonth =concat(year(current_date()),'-' ,month(current_date()))

我不确定上面的查询,因为如果表case condition中没有当前月份记录,只需在emonth列中指定previous month。但是如果月份是当前月份,我需要进行验证,否则获取上个月的数据。

pgky5nke

pgky5nke1#

月份(字符串日期)可用于从任何日期戳获取月份。
所以你可以试试:
选择emp\u name、emp\u number、case when emonth is null then month(add\u months(current\u date(),-1)),否则emonth end from db.emptable

abithluo

abithluo2#

使用行号筛选数据:

select  emonth, emp_name, emp_number
 from
(
select emonth, emp_name, emp_number,
       row_number() over (partition by emp_number order by case when emonth= substr(current_date(),1,7) then 1 else 2 end ) rn
  from db.emptable
where emonth >= substr(add_months(concat(substr(current_date(),1,7),'-01'),-1),1,7) --prev month
)s
where rn=1 -- If current month is absent, previous month rn=1

在行\号中写入partition by子句,因为您需要正确计算它。在我的答案中,每一个emp\u数字都会计算出第\u行的数字。

相关问题