0

我需要帮助编写 MySQL 查询。到目前为止,似乎没有一个问题符合我的需求。

我有一张order桌子和一张order_log桌子。在 order_log 表中,我会在每次更改订单状态时进行记录。我需要显示 order_log 表中最新状态更改的列表。我当前使用的查询在两个表上执行 JOIN 并获取 order.status = order_log.status 的所有内容。

这样做的问题是,有时一个订单会多次通过相同的状态。发生这种情况时,我的查询会获取 order_log 表中该订单和该状态的每个条目,但我只想要最近的日志。

我尝试编写一个新的 JOIN 查询来获取 order_log 日期条目的最大值,但它只返回 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 )
) 

有任何想法吗?

4

2 回答 2

0

有很多方法可以做到这一点,一种是有一个单独的子查询来获取每条记录的最新条目:order_ID.

子查询的结果然后与原始表连接回来,但有多个条件:它匹配 theorder_ID和 latest 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
于 2013-01-17T03:32:12.430 回答
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
于 2013-01-17T03:34:29.713 回答