Sql presto/aws athena-选择记录的最新版本

Sql presto/aws athena-选择记录的最新版本,sql,amazon-athena,presto,Sql,Amazon Athena,Presto,我有一个order events表,当它被填满时,每个订单只包含几个条目。有些订单被取消或退款。我正在尝试选择所有订单的最新版本,其中最新版本的状态为“OrderConfirmation”,我假设我将使用以下SQL,但AWS Athena抱怨“latest_order_update.latest_update”列无法解析。有什么线索吗 WITH latest_order_update AS ( SELECT orderevent_order.unique_id, MAX(orderevent

我有一个order events表,当它被填满时,每个订单只包含几个条目。有些订单被取消或退款。我正在尝试选择所有订单的最新版本,其中最新版本的状态为“OrderConfirmation”,我假设我将使用以下SQL,但AWS Athena抱怨“latest_order_update.latest_update”列无法解析。有什么线索吗

WITH latest_order_update AS (
  SELECT orderevent_order.unique_id, MAX(orderevent_order.event_time) AS latest_update
  FROM orderevent_order
  GROUP BY orderevent_order.unique_id)
SELECT orderevent_order.unique_id
FROM orderevent_order
WHERE orderevent_order.event_time = latest_order_update.latest_update AND orderevent_order.header_event_name = 'OrderConfirmed'
LIMIT 10;

您可以用
行号
重写它:

WITH cte AS (
 SELECT oo.unique_id,
    ,ROW_NUMBER() OVER(PARTITION BY unique_id ORDER BY event_time DESC) rn
  FROM orderevent_order oo
)
SELECT * 
FROM cte
WHERE rn = 1;
或参考
FROM/JOIN
/子查询中的cte:

WITH latest_order_update AS (
  SELECT orderevent_order.unique_id, 
     MAX(orderevent_order.event_time) AS latest_update
  FROM orderevent_order
  GROUP BY orderevent_order.unique_id)
SELECT orderevent_order.unique_id
FROM orderevent_order
WHERE orderevent_order.event_time IN (SELECT l.latest_update 
                                      FROM latest_order_update l
                                      WHERE orderevent_order.unique_id 
                                         = l.unique_id)           
  AND orderevent_order.header_event_name = 'OrderConfirmed'
LIMIT 10;
加入:


您可以用
行号
重写它:

WITH cte AS (
 SELECT oo.unique_id,
    ,ROW_NUMBER() OVER(PARTITION BY unique_id ORDER BY event_time DESC) rn
  FROM orderevent_order oo
)
SELECT * 
FROM cte
WHERE rn = 1;
或参考
FROM/JOIN
/子查询中的cte:

WITH latest_order_update AS (
  SELECT orderevent_order.unique_id, 
     MAX(orderevent_order.event_time) AS latest_update
  FROM orderevent_order
  GROUP BY orderevent_order.unique_id)
SELECT orderevent_order.unique_id
FROM orderevent_order
WHERE orderevent_order.event_time IN (SELECT l.latest_update 
                                      FROM latest_order_update l
                                      WHERE orderevent_order.unique_id 
                                         = l.unique_id)           
  AND orderevent_order.header_event_name = 'OrderConfirmed'
LIMIT 10;
加入: