2013-06-25 33 views
0

我有一個包含類似於下面列的東西表:高級分區查詢

infopath_form_id  (integer) 
form_type   (integer) 
approver    (varchar) 
event_timestamp  (datetime) 

此表包含InfoPath表單,並且在系統中提交的各種形式的審批歷史記錄被賦予一個唯一的infopath_form_id這是爲了存儲。每種表格的審批者數量並不一致(因爲它根據交易的價值而有所不同),但表格總是至少有兩個批准者。每個批准任務都作爲另一行寫入表中,並且只有先前批准的歷史記錄存儲在此表中。

我需要弄清楚的是每種表單類型的審批之間的平均時間。我已經嘗試過使用分區的每一種方式來解決這個問題,但是由於每個表單沒有固定數量的審批者,所以我陷入了困境。我應該如何處理這個問題?

+0

sql服務器沒有一個名爲'integer'的類型。你可能是指'int'。 –

+0

@zespri好吧,是的,顯然;) – Codingo

回答

3

我相信你想這樣的:

SELECT infopath_form_id 
    , DATEDIFF(Minutes,MIN(event_timestamp),MAX(event_timestamp))/CAST(COUNT(*)-1 AS FLOAT) 
FROM Table 
GROUP BY infopath_form_id 

這會給你每個InfoPath_form_id第一個和最後一個條目之間分鐘的平均數。

使用的功能

說明:

  1. MIN()返回的最早日期
  2. MAX()返回最新的日期
  3. DATEDIFF()返回兩個日期之間在給定的單位時間(分鐘在該實施例中)
  4. COUNT()返回每個分組項目的行數(即InfoPath_form_id)

因此,簡單地將總分鐘數除以1得到平均分鐘數的記錄數。

+3

其實,你想用count(*) - 1'來劃分它。 –

+0

更新,良好的通話。 –