【发布时间】:2019-04-18 04:41:07
【问题描述】:
我有一个表order_status_history,其中为每个订单状态更改存储一行,我想获取确定订单状态的最后一个条目。
涉及的表(简化):
orders
| id |
| 1 |
order_products
| id | order_id | productid | quantity|
| 1 | 1 | 1 | 1 |
| 2 | 1 | 1 | 2 |
| 3 | 1 | 1 | 2 |
| 4 | 1 | 1 | 10 |
order_status_history
| id | order_id | order_status_id | updatedat |
| 1 | 1 | 1 | 2017-05-18 18:45:50 |
| 2 | 1 | 2 | 2017-05-19 18:45:50 |
| 3 | 1 | 3 | 2017-05-20 18:45:50 |
| 4 | 1 | 2 | 2017-05-21 18:45:50 |
| 5 | 1 | 3 | 2017-05-22 18:45:50 |
我真正需要的是:
如果最后一个订单状态为“3”(因为“4”表示已取消或无论如何都不可用),则对于每个订单 ID,只获取最后一个条目(基于 updatedat 列,最后一个表示最近的)
这是我尝试过的查询,但在这种情况下,为相同的订单 ID 和状态 3 返回 2 行:
SELECT o.id,
osh.updatedat,
op.quantity
FROM orders_products op
LEFT JOIN order_status_history osh
ON osh.order_id = op.orderid
LEFT JOIN orders o
ON o.id = op.orderid
WHERE op.productid = 1
AND (SELECT osh.order_status_id
FROM order_status_history osh
WHERE osh.order_id = o.id
ORDER BY osh.updatedat DESC
LIMIT 1) = 3
【问题讨论】:
-
请尝试提供相关且最少的示例数据,以展示您的要求和预期输出。请参阅此链接以了解如何构建一个好的 SQL 问题:Why should I provide an MCVE for what seems to me to be a very simple SQL query?
-
修改问题
标签: mysql distinct-values