RedShift关联子查询



需要您的帮助。我正在尝试将下面的SQL查询转换为RedShift,但收到错误消息">无效操作:还不支持这种类型的相关子查询模式">

SELECT
Comp_Key,
Comp_Reading_Key,
Row_Num,
Prev_Reading_Date,
( SELECT MAX(X) FROM (
SELECT CAST(dateadd(day, 1, Prev_Reading_Date) AS DATE) AS X
UNION ALL 
SELECT dim_date.calendar_date
) a
) as start_dt
FROM stage5
JOIN dim_date ON calendar_date BETWEEN '2020-04-01' and '2020-04-15'    
WHERE Comp_Key =50906055

相同的查询在SQL Server中运行良好。你能帮我在RedShift中运行它吗?

问候,

Kiru

Kiru-您需要将相关查询转换为联接结构。不知道你的表格的数据内容和确切的预期输出,我只是猜测,但这里有一个swag:

SELECT
Comp_Key,
Comp_Reading_Key,
Row_Num,
Prev_Reading_Date,
Max_X
FROM stage5
JOIN dim_date ON calendar_date BETWEEN '2020-04-01' and '2020-04-15'  
JOIN ( SELECT MAX(X) as Max_X, MAX(calendar_date) as date FROM (
SELECT CAST(dateadd(day, 1, Prev_Reading_Date) AS DATE) AS X FROM stage5
cross join
SELECT dim_date.calendar_date from dim_date
) a
) as start_dt ON   a.date = dim_date.calendar_date
WHERE Comp_Key =50906055

这只是一个开始的猜测,但可能会让你开始。

然而,您最好重写此查询以使用窗口函数,因为它们是在Redshift中执行这些类型的循环查询的最快方法。

谢谢比尔。它在RedShift中不起作用,因为它仍然有相应的子查询。

不过,我用另一种方法修改了查询,它运行良好。我正在收票。

最新更新