Hive 在蜂巢中检索上周星期六日期

Hive 在蜂巢中检索上周星期六日期,hive,Hive,可以在蜂巢中检索上周六的日期吗 需要此格式的输出,即“2014-11-01” 无论何时运行查询,它都必须返回上周六的日期。执行此操作 select CASE WHEN from_unixtime(unix_timestamp(),'EEEE')="Friday" THEN Date_add(CAST(from_unixtime(unix_timestamp()-1*60*60*24,'yyyy-MM-dd') as String),-5) WHEN from_unixtime(unix_t

可以在蜂巢中检索上周六的日期吗

需要此格式的输出,即“2014-11-01”

无论何时运行查询,它都必须返回上周六的日期。

执行此操作

select  CASE 
WHEN from_unixtime(unix_timestamp(),'EEEE')="Friday" 
THEN Date_add(CAST(from_unixtime(unix_timestamp()-1*60*60*24,'yyyy-MM-dd') as String),-5)
WHEN from_unixtime(unix_timestamp(),'EEEE')="Thursday" 
THEN Date_add(CAST(from_unixtime(unix_timestamp()-1*60*60*24,'yyyy-MM-dd') as String),-4)
WHEN from_unixtime(unix_timestamp(),'EEEE')="Wednesday" 
THEN Date_add(CAST(from_unixtime(unix_timestamp()-1*60*60*24,'yyyy-MM-dd') as String),-3)
WHEN from_unixtime(unix_timestamp(),'EEEE')="Tuesday" 
THEN Date_add(CAST(from_unixtime(unix_timestamp()-1*60*60*24,'yyyy-MM-dd') as String),-2)
WHEN from_unixtime(unix_timestamp(),'EEEE')="Monday" 
THEN Date_add(CAST(from_unixtime(unix_timestamp()-1*60*60*24,'yyyy-MM-dd') as String),-1)
WHEN from_unixtime(unix_timestamp(),'EEEE')="Sunday" 
THEN Date_add(CAST(from_unixtime(unix_timestamp()-1*60*60*24,'yyyy-MM-dd') as String),0)
ELSE Date_add(CAST(from_unixtime(unix_timestamp()-1*60*60*24,'yyyy-MM-dd') as String),-6)
END
from fun;
输出

2014-11-01

以下查询将解决您的问题:

SELECT  date_sub(CURRENT_DATE, cast(from_unixtime(unix_timestamp(), 'u') AS int) + 1);

Danila Ganchar是对的。这是找到上周星期六最聪明、最快的方法


选择date_sub(from_unixtime(unix_timestamp()),cast(from_unixtime(unix_timestamp(),'u')AS int)+1

它正在为第二行抛出一个错误“-ksh:syntax error:`WHEN'unexpected”。这里的乐趣是什么?在ksh和bash shell上工作。乐趣只是一个至少有一条记录的表(任何表)。那一次我得告诉你。如果它能工作,请将其更正。表格中是否有任何记录??创建表格乐趣(xyz字符串);将数据本地“测试”覆盖加载到表中;在fun表中有一条记录2014-11-05,然后运行上述命令