首页 > 解决方案 > 如何在 INNER JOIN 语句中获取 MAX 日期

问题描述

我想获取在单独的表“order_status_change”中记录状态的订单状态。使用以下脚本,我能够获取所有记录,但不能获取最新状态。(需要 max(status change_date) 的 order_item_ID 状态。

 SET @UserID = 160;
    SET @OrderDateTime = '2018-11-13 09:23:45';

    SELECT 
order_items.ORDER_ITEM_ID,
order_price.ORDER_ITEM_TOTAL_PRICE,
order_status_change.ORDER_STATUS

FROM order_items 

INNER JOIN order_price ON order_price.ORDERP_ITEM_ID = order_items.ORDER_ITEM_ID

INNER JOIN order_status_change ON order_status_change.ORDER_ITEM_ID = order_items.ORDER_ITEM_ID

WHERE ((SELECT A.A_User_ID from A WHERE A.A_USER_ID = @UserID) AND (DATE(order_items.ORDER_REQUIRED_DATE_TIME) = DATE(@OrderDateTime)))

如果我使用 Max(order_status_change.STATUS_CHANGE_DATE) 那么我只会得到一条记录。我通过查看此处的不同示例修改了查询,但没有工作。

SELECT 
order_items.ORDER_ITEM_ID,
order_price.ORDER_ITEM_TOTAL_PRICE,
order_status_change.ORDER_STATUS

FROM order_items 

INNER JOIN order_price ON order_price.ORDERP_ITEM_ID = order_items.ORDER_ITEM_ID

INNER JOIN 
(SELECT MAX(order_status_change.ORDER_STATUS_CHANGE_DATETIME) AS STATUS_CHANGED_DATE FROM order_status_change WHERE order_status_change.ORDER_ITEM_ID = order_items.ORDER_ITEM_ID) 
AS order_status_change ON order_status_change.ORDER_ITEM_ID = order_items.ORDER_ITEM_ID

WHERE ((SELECT A.A_User_ID from A WHERE A.A_User_ID = @UserID) AND (DATE(order_items.ORDER_REQUIRED_DATE_TIME) = DATE(@OrderDateTime)))

如何获得每个 order_items.ORDER_ITEM_ID 的“最新” order_status_change.STATUS ?

标签: mysqljoinmax

解决方案


你可以试试这个。

SELECT 
    order_items.ORDER_ITEM_ID,
    order_price.ORDER_ITEM_TOTAL_PRICE,
    order_status_change.ORDER_STATUS
FROM order_items 
INNER JOIN order_price ON order_price.ORDERP_ITEM_ID = order_items.ORDER_ITEM_ID
INNER JOIN 
(
    SELECT MAX(order_status_change.ORDER_STATUS_CHANGE_DATETIME) AS STATUS_CHANGED_DATE,ORDER_ITEM_ID
    FROM order_status_change 
    GROUP BY ORDER_ITEM_ID
) AS order_status_change ON order_status_change.ORDER_ITEM_ID = order_items.ORDER_ITEM_ID
WHERE (
    (DATE(order_items.ORDER_REQUIRED_DATE_TIME) = DATE(@OrderDateTime))
)

推荐阅读