在hive中获取第15个最后工作日日期yyyymmdd(不包括周末)

x0fgdtte  于 2021-06-25  发布在  Hive
关注(0)|答案(1)|浏览(578)

我有一个带有日期列的表(日期为字符串格式yyyymmdd)。我的要求是设计一个逻辑,从“日期列值等于上一个工作日的第15个日期”(仅周六和周日除外)的表中获取数据,而不使用自定义项或shell脚本。例如今天是2020年2月21日;逻辑应该产生一个输出:20200203。

zengzsys

zengzsys1#

假设根据您的示例,您实际上指的是前14个工作日,并且您忽略了假日,那么它只是一个date\u子函数,包含一周中某一天的case语句。

case from_unixtime(unix_timestamp(event_date,'yyyyMMdd'),'u')
  when 1 then regexp_replace(date_sub(from_unixtime(unix_timestamp(event_dt,'yyyymmdd' )),20),'-','')
  when 2 then regexp_replace(date_sub(from_unixtime(unix_timestamp(event_dt,'yyyymmdd' )),20),'-','')
  when 3 then regexp_replace(date_sub(from_unixtime(unix_timestamp(event_dt,'yyyymmdd' )),20),'-','')
  when 4 then regexp_replace(date_sub(from_unixtime(unix_timestamp(event_dt,'yyyymmdd' )),20),'-','')
  when 5 then regexp_replace(date_sub(from_unixtime(unix_timestamp(event_dt,'yyyymmdd' )),18),'-','')
  when 6 then regexp_replace(date_sub(from_unixtime(unix_timestamp(event_dt,'yyyymmdd' )),18),'-','')
  when 7 then regexp_replace(date_sub(from_unixtime(unix_timestamp(event_dt,'yyyymmdd' )),19),'-','')
end as new_date

假设星期一和星期一一样,如果星期五和星期五一样,则使用19、20。
如果您需要考虑假期,那么您需要创建一个包含每天的日历表,并注意哪些天是假期,然后它是表的一个联接,如果是这样的话,还可以找到更多的逻辑。

相关问题