如何创建一个为每个订单生成MAXDATE的查询?

时间:2015-08-16 17:38:49

标签: sql join maxdate

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

我需要获取一个表格,其中显示每个orderNum最新的orderDeliveryDate以及其他TEST表格列(nb: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

任何人都可以帮我解决这个问题吗?

感谢您的帮助。

1 个答案:

答案 0 :(得分: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)