sql - presto/aws athena - 选择最新版本的记录
问题描述
我有一个订单事件表,每个订单在完成时包含很少的条目。一些订单被取消或退款。我正在尝试选择最新版本状态为“OrderConfirmed”的所有订单的最新版本,我以为我会使用以下 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;
解决方案
你可以重写它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;
或者参考FROM/JOIN
/subquery 中的 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 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;
推荐阅读
- python - 有没有办法发送到 python 3.8 套接字模块中的所有连接?
- java - 如何强制 Jena API 的 findShortestPath 方法执行 BFS
代替 ? - sql - 使用新的 ASP.NET Core 应用程序连接到 SQL Server 时出现问题
- python-3.x - Python条件查找?
- python-2.7 - 使用 autoit 从我的 python 脚本中执行 ENTER
- excel - 使用自动过滤器时如何仅选择可见行
- kotlin-android-extensions - 如何生成一定范围内的随机数?应用程序不断停止
- javascript - 如何在没有任何 API 调用的情况下从网页 Javascript 将 JSON 字符串传递给 AWS Lambda 函数?
- mysql - 尝试在 MySQL8 中重置忘记的 root 密码时出错?
- sql-server - 使用查询的 SQL Server 版本验证