2016-07-22 85 views
1

我需要獲取表示爲同一個表中的行的兩個事件之間的時間差。其中,該行具有以下字段:減去具有匹配字段的兩個日期和SQL中的另一個特定字段值表

JobNum 
EventDate 
Event 

Event字段用於看該事件是否爲工作開始或結束。

我需要獲得EventDate字段之間的時間差,其中JobNum是相同的。因爲可以有單個JobNum多個事件,我還需要指定JobNum是相同的,僅從一行EventDate = 'Finished'減去行其中EventDate= 'Starting'(總會有隻有每JobNum一個Starting和一個Finished事件)。

以下是據我已經得到了,但它不工作:

Select a.[AutoNumber], DATEDIFF(SECOND, (SELECT m.EventDate 
               FROM [myTable] m 
               WHERE m.Event = 'Starting' and a.JobNum= m.JobNum), 
             (SELECT m.EventDate 
               FROM myTable m 
               WHERE m.Event = 'Finished' and a.JobNum= m.JobNum) 
     ) 
     From myTable a 

這部分運行,但隨後提供了以下錯誤:

Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.

我也看了看這個問題,但無法弄清楚如何修改代碼以適應我的情況。 How to get difference between two rows for a column field?

任何幫助將不勝感激。

+0

是它確認只有一個'Starting'和'Finished'每JobNum的單記錄?看起來你的數據沒有。 – Squirrel

回答

2

如果我正確理解你的問題,這是一個使用一個選項conditional aggregation

Select [AutoNumber], 
     datediff(second, 
       max(case when event = 'starting' then EventDate end), 
       max(case when event = 'Finished' then EventDate end) 
     ) 
From myTable a 
Group By [AutoNumber] 
+0

謝謝。像魅力一樣工作。現在我需要了解有條件的聚合。 :) – mike100111

相關問題