无法将数据与使用 WITH 子句 (Presto) 创建的表中的列进行比较



我正在使用 Amazon Athena 控制台,它使用的是 presto。我使用以下WITH子句,只获得在"product_delivery"表中购买自行车的每个客户的最早条目:

WITH t1 AS 
(SELECT customer_code, product_type, date_stamp
FROM "products"."product_delivery" f1
WHERE product_code like '%bike%'
AND date_stamp = (SELECT MAX(date_stamp) 
FROM "products"."product_delivery" f2 
WHERE f1.product_code=f2.product_code)
)

然后,我试图在原始送货表上找到相同的客户,他们购买手套的日期晚于他们获得第一辆自行车的日期:

SELECT * 
FROM "products"."product_delivery" f3
WHERE customer_code IN (SELECT customer_code from t1)
AND product_code like '%gloves%'
AND (f3.date_stamp>t1.date_stamp WHERE f3.customer_code=t1.customer_code)

当我这样做时,我收到错误"列t1.date_stamp"无法解决,即使我在上面创建了一个date_stamp列的 t1。

如何将表中的数据与使用WITH子句创建的表中的数据进行比较?使用WITH子句创建表时,是否有不同的语法来指定列?

您在 F3 中没有任何与 T1 的连接,因此您无法在 where 子句中使用 T1 子查询date_stamp列,第一个连接它们并使用如下所示

With t1 AS (
SELECT customer_code, product_type, date_stamp
FROM "products"."product_delivery" f1
WHERE product_code like '%bike%'
AND date_stamp = (SELECT MAX(date_stamp)
from  "products"."product_delivery" f2
WHERE f1.product_code=f2.product_code)
) ,
t2 as    
(
SELECT * 
FROM "products"."product_delivery" f3
join t1 on f3.customer_code=t1.customer_code
WHERE 
customer_code IN (SELECT customer_code from t1) // as joined so this condition not required
AND f3.product_code like '%gloves%'
AND f3.date_stamp>t1.date_stamp
)  select * from t2

相关内容

  • 没有找到相关文章

最新更新