问题描述
我正在编写一个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