我希望按表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)
答案 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