我有 2 个表、订单和交易。订单表中每个订单有 1 行,交易表中每个订单有多行。
我想要检查哪些订单与具有相同 OrderNumber 的交易行的第一个实例相比具有不同的 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
不应包含第一行!
最佳答案
问题是您在 from
子句中有事务表。你不需要它。但是,要获取用于比较的值,您不能引用 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;
关于mysql - 如何比较这两个日期并排除相同的实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32969253/