我需要帮助编写MySQL查询。到目前为止,没有任何问题似乎符合我的需求。
我有一个order
表和一个order_log
表。在order_log表中,每次订单状态发生变化时都会记录一次。我需要显示order_log表中最新状态更改的列表。我正在使用的查询在两个表上执行JOIN并获取order.status = order_log.status的所有内容。
问题在于,有时订单会多次通过相同的状态。当发生这种情况时,我的查询会抓取order_log表中该订单和该状态的每个条目,但我只想要最新的日志。
我尝试编写一个新的JOIN查询来获取order_log日期条目的Max,但它只返回1个条目。这就是我所拥有的。
SELECT *
FROM order_status_log AS l
JOIN orders AS o ON ( l.order_id = o.id )
WHERE l.status = o.status
AND l.date = (
SELECT MAX( date )
FROM order_status_log l2
JOIN orders AS o2 ON ( l2.order_id = o2.id )
)
有什么想法吗?
答案 0 :(得分:0)
有很多方法可以做到,一个是有一个单独的子查询获取每条记录的最新条目:order_ID
。
然后子查询的结果与原始表连接在一起但有多个条件:它与order_ID
以及最新的date
匹配。
SELECT a.*, b.*
FROM `order` a
INNER JOIN order_log b
ON a.id = b.order_ID
INNER JOIN
(
SELECT order_ID, MAX(date) max_date
FROM order_log
GROUP BY order_ID
) c on b.order_ID = c.order_ID AND
b.date = c.max_date
答案 1 :(得分:0)
这可能会有所帮助;
select olg.column1,o.column2,max(olg.date) from --You can add other columns as well
order_status_log olg
join orders o
on olg.id = o.order_id
group by olg.column1,o.column2