使用Server 2005,我需要获得位于同一列中的2个日期的datediff,表如下所示:
OrderNo OpNo ResType LoadedStartDate
-----------------------------------------------------
12345 1 PAINT 2014-05-01 00:00:00.000
12345 2 PAINT 2014-05-02 00:00:00.000
12345 3 PAINT 2014-05-03 00:00:00.000
12345 4 ASMB 2014-05-04 00:00:00.000
67890 1 PAINT 2014-05-02 00:00:00.000
67890 2 PAINT 2014-05-03 00:00:00.000
67890 3 PAINT 2014-05-04 00:00:00.000
67890 4 ASMB 2014-05-05 00:00:00.000我需要获得OpNo 1和OpNo 4的日期差异,其中它们是相同的订单号。OpNo将永远是1和4,就像我试图比较的那样,ResType也是如此。
输出需要如下所示:
OrderNo Difference
----------------------
12345 3
67890 3(谢谢你的帮助:)
发布于 2014-04-29 14:09:54
只需将表加入到自己的位置:
SELECT t1.OrderNo,DATEDIFF(day,t1.LoadedStartDate,t2.LoadedStartDate)
FROM UnnamedTableFromQuestion t1
INNER JOIN
UnnamedTableFromQuestion t2
on
t1.OrderNo = t2.OrderNo
WHERE t1.OpNo = 1 and
t2.OpNo = 4发布于 2014-04-29 13:53:10
应该很简单
SELECT DATEDIFF(day,
(SELECT LoadedStartDate FROM Orders WHERE OrderNo = 12345 AND OpNo = 1),
(SELECT LoadedStartDate FROM Orders WHERE OrderNo = 12345 AND OpNo = 4)
)因为内部选择返回标量值,所以它们可以用作DATEDIFF函数的参数。
要使此操作适用于表中的所有订单,您可以执行以下操作:
SELECT DISTINCT OrderNo, DATEDIFF(day,
(SELECT LoadedStartDate FROM Orders WHERE OrderNo = Ord.OrderNo AND OpNo = 1),
(SELECT LoadedStartDate FROM Orders WHERE OrderNo = Ord.OrderNo AND OpNo = 4)
) AS Diff
FROM Orders Ord演示: http://sqlfiddle.com/#!3/bc085/5
发布于 2014-04-29 14:12:26
CTE在这样的场景中发挥着神奇的作用。对于您的需求,可以使用以下查询。
with op1
As
(
select orderno, opno, restype, LoadedStartDate From orders
where opno = 1
),
op4
As
(
select orderno, opno, restype, LoadedStartDate From orders
where opno = 4
)
select op1.orderno, datediff(day, op1.loadedstartdate, op4.loadedstartdate) DifferenceDays
from op1 inner join op4 on op1.orderno = op4.orderno希望它能帮上忙
https://stackoverflow.com/questions/23366495
复制相似问题