如何检索每个“订单号”的最大“交货日期”的记录

时间:2015-09-11 20:21:57

标签: mysql join maxdate

我希望按表TEST的订单号检索所有记录和列,其中每个订单号MAX列的orderDeliveryDate等于昨天。以下代码不起作用:

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)

2 个答案:

答案 0 :(得分:0)

这应该这样做:

xyz abcd abcdef

我正在猜测的是orderDeliveryDate是一个DateTime,因此将其转换为Date将解决您的问题。您的原始查询将适用于转换为日期,我认为我的更简单一点。

答案 1 :(得分:0)

将列转换为比较前的日期,并且为了提高效率,请将测试转移到子查询中:

SELECT  T.* 
FROM TEST T
JOIN(
    SELECT orderNum, DATE(MAX(orderDeliveryDate)) AS maxDeliveryDate
    FROM TEST
    GROUP BY orderNum
    HAVING DATE(MAX(orderDeliveryDate)) = DATE_SUB(curdate(),INTERVAL 1 DAY)
    ) MX
    ON T.orderNum= MX.orderNum
    AND DATE(T.orderDeliveryDate) = MX.maxDeliveryDate