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

标签 mysql sql database

我有 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/

相关文章:

sql - 不同组的最大值

database - 在 Swift Firebase 查询中排除数据和查询部分数据的最佳方法是什么?

mysql - 我应该创建一个数组来存储用户 ID 还是创建新表?

php - Codeigniter PHP 从 mysql 数据库表中提取记录以显示在页面上

sql - SQL中多个字段的汇总查询

mysql - 如何标准化sql查询的结果以及如何将外键引用到两列

android - 如果我在另一台设备上安装该应用程序,是否仍然可以使用预制 ID 登录?

MySql:提取具有相同选项的产品

mysql 交叉表错误总和

sql - 存储过程中 exec 内的临时表的作用域规则是什么?