【发布时间】:2021-05-13 06:03:58
【问题描述】:
我们正在跟踪我们的运输合作伙伴通过他们触发的 webhook 发送的订单状态。 Webhook 每次触发时都会添加一行,因此每个订单都有多行与之关联。
表的结构 enter image description here
我们正在尝试创建一个 sql 查询以获取以下内容
查找最后收到的“awb”行。获取该行中的 current_status。如果current_status 是“PICKUP EXCEPTION”、“OUT FOR PICKUP”、“PICKUP RESCHEDULED”中的任何一个,则找到该特定“awb”的这些状态第一次出现的行
检查 awb 的这些状态第一次出现和最后一次出现之间的天数
并输出相差超过 2 天的 awb。
这是我能够创建的查询。
WITH ranked_order_status AS (
SELECT os.*,
datediff(
now() ,
first_value(recived_at) over (partition by awb order by recived_at asc)
) as diff,
ROW_NUMBER() OVER (PARTITION BY awb ORDER BY recived_at desc) AS rn
FROM order_status AS os where current_status in ('PICKUP EXCEPTION', 'OUT FOR PICKUP', 'PICKUP RESCHEDULED')
)
SELECT * FROM ranked_order_status WHERE rn = 1 and diff > 2
不幸的是,这向我显示了所有具有这些状态的行的 awb,而不仅仅是那些最后收到的当前状态为“PICKUP EXCEPTION”、“OUT FOR PICKUP”、“PICKUP RESCHEDULED”的awb
知道如何编辑吗?
【问题讨论】:
-
如果不包括示例数据,您可能无法得到答案。
-
@TimBiegeleisen 在此处添加示例数据的最佳方式是什么?我有 .sql 文件。而且它不是太大。截至目前 5000 行
-
你可以使用db-fiddle.com