2014-04-29 74 views
2

2個日期使用SQL Server 2005,我需要得到2 datediff的日期是在同一列的,表看起來像這樣:則DateDiff在同一列SQL

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 

感謝所有幫助:)

回答

3

剛剛加入該表本身:

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 
0

應該很簡單

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

+0

Oooh,Lovely。關聯子查詢並使用「DISTINCT」來欺騙資源集。該查詢可能有一些性能問題。 –

+0

@Damien_The_Unbeliever是。 Upvoted你的 - 非常整齊 –

0

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 

希望它可以幫助

0
SELECT DISTINCT ORDERNO,MAX(DATEPART(DAY,LoadedStartDate))-MIN(DATEPART(DAY,LoadedStartDate)) 
FROM ORDERS GROUP BY ORDERNO 

心靈,你可以使用:

SELECT DISTINCT ORDERNO,MAX(LoadedStartDate)-MIN(LoadedStartDate) FROM ORDERS GROUP BY ORDERNO 

其中在日期時間格式返回4天可能是因爲沒有時間,由於MIN和MAX的性質,數據庫假定從第一天開始到第四天結束爲止的整整四天。

如果您確實有訂單時間,並且您想要一個確切在第一個和最後一個訂單之間的時間跨度,可以將兩個日期時間翻譯成一個整數,每個單位以毫秒爲單位,從較高的數字中減去較低的數字,然後將答案重新轉換回日期時間格式。