0

我正在寻找按表的订单号检索所有记录和列,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)
4

2 回答 2

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
于 2015-09-11T21:39:19.117 回答
0

这应该这样做:

SELECT * FROM TEST 
WHERE ORDERNUM IN 
    (SELECT ORDERNUM, MAX(orderDeliveryDate)
     FROM TEST GROUP BY ORDERNUM 
     HAVING DATE(MAX(orderDeliveryDate)) = DATE(DATE_SUB(curdate(),INTERVAL 1 DAY)))

我的猜测是 orderDeliveryDate 是 DateTime,因此将其转换为 Date 将解决您的问题。您的原始查询可以转换为日期,我认为我的查询更简单一些。

于 2015-09-11T20:33:56.807 回答