MySQL中如何计算同表中两个指定订单的OrderDate日期差?
问题分析与解决
你的SQL语句逻辑存在矛盾:自连接的ON p.OrderID = m.OrderID要求两张表关联的OrderID必须相等,但WHERE条件又同时限定p.OrderID = 1和m.OrderID = 5,这两个条件不可能同时满足,因此无法正确匹配到需要计算日期差的两条记录,最终返回结果不符合预期。
正确写法示例
方法1:子查询直接获取日期计算差值
SELECT DATEDIFF( (SELECT OrderDate FROM orders WHERE OrderID = 1), (SELECT OrderDate FROM orders WHERE OrderID = 5) ) AS DateDiff;
方法2:正确使用自连接(交叉关联)
SELECT DATEDIFF(p.OrderDate, m.OrderDate) AS DateDiff FROM orders p, orders m WHERE p.OrderID = 1 AND m.OrderID = 5;
或者显式INNER JOIN写法:
SELECT DATEDIFF(p.OrderDate, m.OrderDate) AS DateDiff FROM orders p INNER JOIN orders m ON 1=1 WHERE p.OrderID = 1 AND m.OrderID = 5;
注意:不同数据库的DATEDIFF函数参数顺序可能有差异,比如MySQL中DATEDIFF(date1, date2)返回date1减date2的天数,而SQL Server中需要用DATEDIFF(day, date2, date1)实现相同逻辑,需根据你使用的数据库调整参数顺序。
内容的提问来源于stack exchange,提问作者حفيد عمر ابن الخطاب
相关产品推荐
相关产品推荐

