我有两张桌子。 交易(ID,TERMINALID)和终端(ID,TERMINALID,EXPORT_DATE)。目标是为交易表中的每一行获取最新的终端表。雪花被用作后端。
我有这个SQL查询:
SELECT tr.ID,
(SELECT te.ID
FROM "Terminal" te
WHERE te.TERMINALID = tr.TERMINALID
ORDER BY te.EXPORT_DATE DESC
LIMIT 1)
FROM "Transaction" tr;
但是我得到这个错误:
如果我将tr.TERMINALID替换为特定值,错误消失。所以我不能从嵌套SELECT引用父表。为什么这不可能呢?查询在MySQL中有效。
最佳答案
恐怕Snowflake不支持这种相关子查询。
您可以使用FIRST_VALUE
来计算最佳的每终端ID,以实现所需的目标:
-- First compute per-terminalid best id
with sub1 as (
select
terminalid,
first_value(id) over (partition by terminalid order by d desc) id
from terminal
),
-- Now, make sure there's only one per terminalid id
sub2 as (
select
terminalid,
any_value(id) id
from sub1
group by terminalid
)
-- Now use that result
select tr.ID, sub2.id
FROM "Transaction" tr
JOIN sub2 ON tr.terminalid = sub2.terminalid
您可以先运行子查询以查看其作用。
我们正在努力改善对子查询的支持,并且可能会进行更简单的重写,但是我希望它会有所帮助。