我有两张桌子。 交易(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

您可以先运行子查询以查看其作用。

我们正在努力改善对子查询的支持,并且可能会进行更简单的重写,但是我希望它会有所帮助。

08-03 20:05