hql:上个月的最大日期

xn1cxnb4  于 2021-06-24  发布在  Hive
关注(0)|答案(1)|浏览(418)

早上好,我有一个问题,我一直在努力解决,但现在正在哪里。
我要找出上个月的最长日期。通常我只会使用以下内容来查找上个月的最后一天:last\u day(add\u months(current\u date,-1)
然而,这个特定的数据集并不总是有最后一天的数据。e、 5月份数据的最后一天是5月30日。显然,如果我尝试使用上面的语法,它将不会返回任何数据,因为它将查找5/31。
那么,有没有办法在上个月的数据中找到可用的“最大”天数呢?或者前一个月。?

5n0oy7gb

5n0oy7gb1#

例如,如下所示(表的两次扫描:一次在子查询中查找max date,另一次在主查询中):

select * 
  from mytable
where as_of_date in (select max(as_of_date) from mytable where as_of_date between first_day(add_months(current_date, -1)) and  last_day(add_months(current_date, -1))

或者像这样(单扫描+分析函数)

select col1 ... colN
from
(
     select t.*, rank() over (partition by month (t.as_of_date) order by t.as_of_date desc) rnk
      from mytable t 
     where --If you have partition on date, this WHERE may improve performance 
          t.as_of_date between first_day(add_months(current_date, -1)) and  last_day(add_months(current_date, -1))
)s 
where rnk=1

相关问题