我有一张如下表:
我想要如下:
我正在雪花中尝试这个。 我使用 case 语句并按 row_number 查询进行分区来获取最新的价格值。
但是我在雪花中遇到了错误
SQL 编译错误:无法评估不支持的子查询类型
我尝试使用 case sql 并使用 row_number 查询分区来获取最新的日期值。
还有其他方法可以在 SQL 中实现此目的吗?
我使用这个sql:
Select
t1.S_ID,t1.BASE,t1.Price_Attribute,
case when (t1.BASE = 'SIM1')
then (Select C1.Price_Value
from (Select S_ID,BASE,Price_Attribute,Price_Value,LAST_MODIFIED_DATE,
ROW_NUMBER() OVER (PARTITION BY S_ID ORDER BY (LAST_MODIFIED_DATE) DESC) AS RowNumber
from Table2
where BASE ='SIM1'
and Price_Attribute ='REC_PRC')as C1
where C1.RowNumber = 1 and C1.S_ID = t1.S_ID)
end as Price_Value,
t1.LAST_MODIFIED_DATE
from Table1 t1
where t1.S_ID in ('S1','S2','S3')
Snowflake 不支持相关子查询,但如果子查询是标量,它就可以工作。 我可以看到你的 CASE 语句有一个相关的子查询。
试试这个代码:
SELECT
t1.S_ID,
t1.BASE,
t1.Price_Attribute,
CASE
WHEN t1.BASE = 'SIM1' THEN
(SELECT MAX(C1.Price_Value)
FROM Table2 AS C1
WHERE C1.BASE = 'SIM1'
AND C1.Price_Attribute = 'REC_PRC'
AND C1.S_ID = t1.S_ID)
END AS Price_Value,
t1.LAST_MODIFIED_DATE
FROM
Table1 t1
WHERE
t1.S_ID IN ('S1', 'S2', 'S3');
这可能适合您的情况,因为 max 运算符将使子查询成为标量,并且当您将检索到的记录限制为一条时不会产生影响。