0

テーブルの注文番号ごとにすべてのレコードと列を取得しようとしていますTEST。各注文番号のMAXorderDeliveryDateは昨日と同じです。次のコードは機能しません。

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 * 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 に変換すると問題が解決します。元のクエリは Date への変換で機能しますが、私のクエリはもう少し簡単だと思います。

于 2015-09-11T20:33:56.807 に答える
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 に答える