查询订单状态为'Awaiting return'的客户及最近订单距今天数
解决方案
先修正你SQL里的关联错误——原语句里o.Oid应该是o.CID,因为Orders表是通过CID和Customers关联的。然后用以下逻辑完成天数计算:
完整SQL示例(以MySQL为例)
SELECT c.CID, c.Name, o.orderStatus, DATEDIFF(CURRENT_DATE, GREATEST(o.OrderDate, o.ReOrderDate)) AS days_since_last_order FROM Customers c INNER JOIN Orders o ON c.CID = o.CID WHERE o.orderStatus = 'Awaiting return'
核心逻辑拆解
- 取最新订单日期:用
GREATEST()函数直接对比OrderDate和ReOrderDate,返回两者里更新的那个,不用写复杂的CASE判断。 - 计算天数差:不同数据库的日期差函数不一样,对应写法如下:
- SQL Server:
DATEDIFF(day, GREATEST(o.OrderDate, o.ReOrderDate), GETDATE()) - PostgreSQL:
CURRENT_DATE - GREATEST(o.OrderDate, o.ReOrderDate) AS days_since_last_order - Oracle:
TRUNC(SYSDATE) - TRUNC(GREATEST(o.OrderDate, o.ReOrderDate))
- SQL Server:
- 处理NULL值:如果
ReOrderDate可能为空,要加COALESCE兜底,改成GREATEST(o.OrderDate, COALESCE(o.ReOrderDate, o.OrderDate)),避免函数报错。
另外,因为你只需要订单状态为'Awaiting return'的记录,用INNER JOIN比LEFT JOIN更合适,不会查出没有对应订单的客户数据。
内容的提问来源于stack exchange,提问作者Sam
相关产品推荐
相关产品推荐

