MySQL JOIN + Max

时间:2013-01-17 03:29:29

标签: mysql sql join greatest-n-per-group

我需要帮助编写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 )
) 

有什么想法吗?

2 个答案:

答案 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