尽管我在Oracle DB方面有很多经验,但对Snowflake编程还是陌生的。
在Snowflake中运行以下查询时,出现错误
SQL编译错误:无法评估不受支持的子查询类型
SELECT organization_id,
inventory_item_id,
revision,
effectivity_date,
revision_label,
revision_id
FROM cg1_mtl_item_revisions_b mir
WHERE effectivity_date IN
(SELECT FIRST_VALUE (ir2.effectivity_date)
OVER (ORDER BY ir2.effectivity_date DESC)
effectivity_date
FROM cg1_mtl_item_revisions_b ir2
WHERE ir2.inventory_item_id = mir.inventory_item_id
AND ir2.organization_id = mir.organization_id
AND ir2.effectivity_date <= CURRENT_DATE
AND ir2.implementation_date IS NOT NULL)
AND mir.revision IN
(SELECT FIRST_VALUE (ir3.revision)
OVER (ORDER BY ir3.revision DESC)
revision
FROM cg1_mtl_item_revisions_b ir3
WHERE ir3.inventory_item_id = mir.inventory_item_id
AND ir3.organization_id = mir.organization_id
AND ir3.implementation_date IS NOT NULL
AND ir3.effectivity_date = mir.effectivity_date);
我在这里想念东西吗?
有人可以在这里帮助我吗?
预先感谢, 苏达山
答案 0 :(得分:3)
您似乎想要从最近的生效日期起的最新版本。在任何数据库中,窗口函数可能是更好的方法:
SELECT mir.* -- whatever columns you want
FROM (SELECT mir.*,
ROW_NUMBER() OVER (PARTITION BY mir.inventory_item_id, mir.organization_id
ORDER BY mir.effectivity_date DESC, mir.revision DESC) as seqnum
FROM cg1_mtl_item_revisions_b mir
) mir
WHERE seqnum = 1;
答案 1 :(得分:1)
Snowflake数据库不像Oracle那样广泛地支持关联子查询。
您必须找到一种重写方法,例如使用
WITH <common table expressions ...>
SELECT ...
JOIN ...
答案 2 :(得分:0)
我发现最后一个子查询中联接的第三个条件是抛出此错误。如果我们注释掉以下行,那么代码将返回数据:
{AND ir3.effectivity_date = mir.effectivity_date}
因此,似乎不支持子查询中的三个联接条件。 我们需要找到满足以上条件的替代代码,以便获得正确的结果集。