需要您的帮助。我正在尝试将下面的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中不起作用,因为它仍然有相应的子查询。
不过,我用另一种方法修改了查询,它运行良好。我正在收票。