0

我有一个名为TEST5 列的表:clientName, clientID, productNum, orderNum, orderDeliveryDate和数千行。它基本上存储订单。每个订单可以由多个产品项目组成,每个产品项目可以有一个特定的交货日期。

我需要获得一个表格,其中显示每个orderNum最新orderDeliveryDate的以及表格的其余TEST列(注意:NULL必须排除值,因为它不应被视为有效日期)。

我知道我需要使用 JOIN,但找不到解决方案。

SELECT * 
FROM `TEST`
INNER JOIN
    (SELECT 
         orderNum, MAX(orderDeliveryDate) AS maxdate
     FROM TEST
     GROUP BY orderNum) groupedorders ON TEST.orderNum = groupedorders.orderNum
                                      AND TEST.orderDeliveryDate = groupedorders.maxdate
GROUP BY orderNum
ORDER BY groupedorders.maxdate ASC

谁能帮我解决这个问题?

谢谢您的帮助。

4

1 回答 1

1

你不需要加入,除非你想挂在另一个表中。您需要做的就是取 MAX 值。NULL 值通常从分组中排除,但如果需要,只需添加WHERE orderDeliveryDate IS NOT NULL

SELECT orderNum, MAX(orderDeliveryDate) maxDeliveryDate
FROM    test
GROUP BY orderNum

但是,如果您需要显示更多数据,而不仅仅是orderNum最新delivery日期,请详细说明。

编辑:这会将最新的交货日期恢复到昨天

SELECT  T.* 
FROM    TEST T
        INNER JOIN(
                SELECT orderNum, MAX(orderDeliveryDate) AS maxDeliveryDate
                FROM TEST
                WHERE orderDeliveryDate <= (yesterday)
                GROUP BY orderNum) MX
            ON T.orderNum= MX.orderNum
            AND T.orderDeliveryDate = MX.maxDeliveryDate

EDIT2:以下查询带回所有具有最新交货日期=昨天的记录

SELECT  T.* 
FROM    TEST T
        INNER JOIN(
                SELECT orderNum, MAX(orderDeliveryDate) AS maxDeliveryDate
                FROM TEST
                GROUP BY orderNum) MX
            ON T.orderNum= MX.orderNum
            AND T.orderDeliveryDate = MX.maxDeliveryDate
            AND MX.maxDeliveryDate = =DATE_SUB(curdate(),INTERVAL 1 DAY)
于 2015-08-16T20:41:55.300 回答