mic*_*al4 4 sql database postgresql snowflake-cloud-data-platform
我有两张桌子.Transaction(ID,TERMINALID)和Terminal(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;
Run Code Online (Sandbox Code Playgroud)
但我得到这个错误:
SQL编译错误:无法计算不支持的子查询类型
如果我用特定值替换tr.TERMINALID,则错误消失.所以我不能从嵌套的SELECT引用父表.为什么这不可能?查询适用于MySQL.
我担心Snowflake不支持这种相关的子查询.
您可以使用FIRST_VALUE计算最佳per-terminalid 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
Run Code Online (Sandbox Code Playgroud)
您可以先运行子查询以查看它们的作用.
我们正在努力更好地支持子查询,并且可能有一个更简单的重写,但我希望它有所帮助.