在 SQL Server (TSQL) 中,我需要找到一系列订单活动之间的日期差异:
tblOrderActivity
OrderID ActivityID ActivityDate
1 1 4/16/2007 8:34:00 AM
1 2 4/16/2007 9:22:00 AM
2 1 4/16/2007 8:34:00 AM
3 1 4/16/2007 8:34:00 AM
3 2 4/16/2007 9:22:00 AM
4 1 4/16/2007 8:34:00 AM
4 2 4/16/2007 9:22:00 AM
无论如何...我知道 DATEDIFF。所以我目前的尝试看起来像:
Select DATEDIFF( MI,
(select tblOrderActivity.ActivityDate
from tblOrderActivity
where ActivityID = 1),
(select tblOrderActivity.ActivityDate
from tblOrderActivity
where ActivityID = 2) )
如果我添加AND OrderID = 1
或添加特定数字,此代码实际上可以工作。问题是......它需要适用于所有订单。所以它应该将 orderID 作为一列返回,并且从 Activity = 1 的日期中减去 ActivityID = 2 的日期的结果。所以对于 Order 的 1、3 和 4,它应该有 48 分钟。对于订单 2,因为没有活动 2,所以那里不应该有结果(我猜是 NULL?)。
编辑:
好的,我遇到了另一个问题。所以这是“完整”表。每个订单有两个以上的活动。
tblOrderActivity
OrderID ActivityID ActivityDate
1 1 4/16/2007 8:34:00 AM
1 2 4/16/2007 9:22:00 AM
1 3 4/16/2007 9:51:00 AM
1 4 4/16/2007 4:14:00 PM
2 1 4/16/2007 8:34:00 AM
3 1 4/16/2007 8:34:00 AM
3 2 4/16/2007 9:22:00 AM
这是我当前的代码的样子:
SELECT
t1.OrderID,
DATEDIFF(MI, t1.ActivityDate, t2.ActivityDate) as TurnTime1,
DATEDIFF(MI, t2.ActivityDate, t3.ActivityDate) as TurnTime2,
DATEDIFF(MI, t3.ActivityDate, t4.ActivityDate) as TurnTime3,
DATEDIFF(MI, t1.ActivityDate, t4.ActivityDate) as TurnTime4
FROM tblOrderActivity t1 INNER JOIN tblOrderActivity t2 ON t1.OrderID = t2.OrderID INNER JOIN tblOrderActivity t3 ON t2.OrderID = t3.OrderID INNER JOIN tblOrderActivity t4 ON t3.OrderID = t4.OrderID WHERE t1.ActivityID = 1 AND t2.ActivityID = 2 AND t3.ActivityID = 3 AND t4.ActivityID = 4
唉...我似乎不擅长格式化代码块。我道歉。
任何状况之下。当我运行此代码时,它只给我订单 1,然后转时间 1、2、3、4 等。它没有给我其他 2 个订单,因为(我假设)它们没有全部4个活动。
有没有办法解决这个问题?