【发布时间】:2018-09-25 00:39:45
【问题描述】:
我的任务是编写一个查询,返回 CustomerID 为 90 的客户的所有订单,以及订单总数和自客户上一次订单以来的天数。
我将使用相关子查询来计算距离上一个订单的天数。
我正在使用 WideWorldImporters 示例数据库中的表 Sales.Orders 和 Sales.OrderLines。
我需要有 OrderID、OrderDate、OrderTotal 和 DaysSincePreviousOrder 列。后者是自上次客户订单以来的天数。
我的解决方案尝试开始设置我的查询如下:
SELECT
O.OrderID,
O.OrderDate,
ISNULL(SUM(OL.UnitPrice * OL.Quantity), 0.00) AS OrderTotal,
DATEDIFF(DAY,
(
SELECT MAX(OrderDate)
WHERE OrderDate < O.OrderDate
), O.OrderDate) AS DaysSincePreviousOrder
FROM Sales.Orders O
INNER JOIN Sales.OrderLines OL ON OL.OrderID = O.OrderID
AND O.CustomerID = 90
GROUP BY O.OrderID, O.OrderDate, O.CustomerID
ORDER BY O.OrderID;
我不确定如何在相关子查询中获取客户先前订单的日期。
我的前两个结果应该是这样的:
**OrderID**--- **OrderDate** ------**OrderTotal** -----**DaysSincePreviousOrder**
1455 -------2013-01-29 -----365.00 --------- NULL
1890 -------2013-02-06 -----915.00 ----------8
任何帮助将不胜感激。
【问题讨论】:
-
请注意,上一个订单日期是比当前订单日期早的最新订单日期。
-
你说你要使用关联子查询。为什么你特别想使用这个方法。您对不需要子查询的方式感兴趣吗?
-
问题明确指出我必须使用相关子查询。我希望我不必
-
好的。如果您有一列日期值,您会使用什么查询来查找这些日期中的最新日期?
-
我会使用 MAX(O.OrderDate)
标签: sql-server tsql subquery correlated-subquery