我有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
不应包括第一行!
答案 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;