【发布时间】:2021-12-30 04:06:39
【问题描述】:
我有这张桌子 order_status_history,每次更新订单时我都会插入一行,假设一个表只有列 id:
| id | order_id | order_status_id | updated_at |
|---|---|---|---|
| 1 | 121 | ready | 2021-12-30 10:00:00 |
| 2 | 121 | shipped | 2021-12-30 10:01:00 |
| 3 | 121 | ready | 2021-12-30 10:02:00 |
| 4 | 121 | shipped | 2021-12-30 10:03:00 |
| 5 | 121 | delivered | 2021-12-30 10:04:00 |
我需要获取所有订单 (DISTINCT) 的最新 updated_at 值,这些订单 (DISTINCT) 作为最后状态已发货,或者如果已交付出于任何原因,没有已发货状态。
我写了这个查询,但我得到了 delivered 状态的最后一个 updated_at 值。在示例情况下,我需要 updated_at 作为 10:03,但我得到的是 10:04。
SELECT o.id,
osh.max_updated_at AS updatedAt
FROM orders o
JOIN ( SELECT order_id,
Max(updatedat) AS max_updated_at
FROM order_status_history
WHERE order_status_id IN('shipped','delivered')
GROUP BY order_id
) AS osh ON osh.order_id = o.id
AND ( SELECT order_status_id
FROM order_status_history
WHERE order_id = o.id
ORDER BY updatedat DESC
LIMIT 1
) IN('shipped','delivered')
【问题讨论】:
-
除了发货或交付之外,还有其他状态吗?
-
select version();显示什么? -
是的,例如“取消”。或者订单可以回到库存,所以“准备好”
标签: mysql conditional-statements