我正在使用 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