代码之家  ›  专栏  ›  技术社区  ›  sumek

presto/aws雅典娜-选择最新版本的唱片

  •  1
  • sumek  · 技术社区  · 6 年前

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

    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;
    
    1 回复  |  直到 6 年前
        1
  •  4
  •   Lukasz Szozda    6 年前

    你可以用 ROW_NUMBER

    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;
    

    或参考中的cte FROM/JOIN

    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 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
    JOIN latest_order_update
      ON orderevent_order.event_time = latest_order_update.latest_update
     AND orderevent_order.unique_id = latest_order_update.unique_id
    WHERE orderevent_order.header_event_name = 'OrderConfirmed'
    LIMIT 10;