Hive SQL交叉连接问题条件

问题描述

神奇的宇宙编码者,我有一个问题:

我正在编写一个HIVE sql脚本,我想知道是否有可能在某种条件下交叉联接(以下条件是星期几是星期五),或者是否有一种性能轻巧的替代方案?我在下面做。 我只需要在星期五的日期中添加两行,这只是星期六和星期日的星期五日期数据的保留。我在联接条件上遇到错误,但是我想知道是否有可能以某种方式绕过它。

为清晰起见,下面编写查询的方式给了我一个错误(特别是DAYOFWEEK(performance_end_date)= 6)。只是想知道是否有办法在可以接受语法的地方编写此代码

请告知。

  select 
portfolio_name,Cast(Date_add(a.performance_end_date,crs.crs) AS TIMESTAMP) AS performance_end_date,return,nav,nav_id,row_no

from
(
SELECT portfolio_name,performance_end_date,cast(cast(nav as decimal(20,2))as string) as nav,row_number() over (partition by a.portfolio_code,a.performance_end_date order by a.nav_id desc) as row_no
FROM carsales a
WHERE  
portfolio_code IN ('1994','2078','2155','2365','2367')
and
year=2020 and month=09


) a
      
CROSS JOIN (SELECT stack(2,1,2) as crs) crs     and DAYOFWEEK(performance_end_date) = 6
           where a.row_no = 1

解决方法

CROSS JOIN没有“加入条件”,因此将您的条件移至where子句

CROSS JOIN (SELECT stack(2,1,2) as crs) crs
           where a.row_no = 1 and DAYOFWEEK(performance_end_date) = 6