如何比较这两个日期并排除相同的实例?

时间:2015-10-06 11:52:19

标签: mysql sql database

我有2个表,订单和交易。订单表每个订单有1行,而事务表每个订单有多行。

我希望检查哪些订单具有与具有相同OrderNumber的事务行的FIRST实例不同的OrderDate。我已经尝试过以下查询。但是看一下回来的一些记录 - 它仍然会返回一些行,其中第一次交易确实发生在与OrderDate相同的日期。它似乎仍在查询针对该OrderNumber存在的第二,第三,第四等交易。我希望它只对第一个进行查询 - 因此我使用了ORDER BY Id LIMIT 0,1 - 但它不对。

SELECT
    o.ordernumber,
    Date(OrderDate),
    Date((
        SELECT
            TransDate
        FROM
            transactions
        WHERE
            OrderNumber = o.OrderNumber
        ORDER BY
            Id
        LIMIT 0,
        1
    )) AS TransDate
FROM
    transactions AS t
JOIN orders AS o ON o.OrderNumber = t.OrderNumber
WHERE
    STATUS = 'booking'
AND date(OrderDate) != Date(TransDate)
ORDER BY
    o.OrderDate ASC

123456789 2015-04-13 2015-04-13

123456788 2015-09-28 2015-10-05

不应包括第一行!

1 个答案:

答案 0 :(得分:0)

问题是您在from子句中有transaction表。你不需要它。但是,要获取比较值,您无法引用select中定义的日期。你可以使用MySQL扩展:

SELECT o.ordernumber, Date(o.OrderDate),
       (SELECT date(TransDate)
        FROM transactions t
        WHERE t.OrderNumber = o.OrderNumber
        ORDER BY t.Id
        LIMIT 0, 1
       ) AS TransDate
FROM orders o
WHERE o.STATUS = 'booking'
HAVING date(OrderDate) <> TransDate
ORDER BY o.OrderDate ASC;