2014-05-22 149 views
0

我有以下Oracle表,其中日期時間是在一列中&具有數據類型爲字符串甲骨文日期時間STRIG格式

f_ID  f_type f_date 

1001  A   3/30/14 12:20:00 PM 

1001  B   3/30/14 10:20:00 AM 

1002  A   2/3/14 11:0:00 AM 

1002  B   2/3/14 9:00:00 AM 

1003  A   2/13/14 10:00:00 AM 

1003  B   12/13/14 10:00:00 AM 

1111  B   12/13/14 10:00:00 AM 

我想要計算採取具有計數> 1的所有貨物的平均時間。因此,1001的出貨時差爲2小時,1002爲2小時,1003爲10個月(303 x 24 = 7272)小時。 1111的count = 1,所以它可以從平均值中排除。

所以平均結果應該是(2+2+7272)/3 = 2425.33 hours

如何查詢?

+0

對於每個F_ID,是否有總是1個結果與F_TYPE = 'B' 和0或1條記錄與F_TYPE = 'A'?另外,我認爲你的樣本計算是錯誤的 - 1001的時差爲2小時,1003爲10個月。 –

+0

是的彼得,感謝修正。我已經爲每個f_id記錄編輯了它 – Chino

+0

,f_type可以是A,B或C,使f_id和f_type形成組合鍵。 – Chino

回答

0

這一個應該工作:

WITH t AS 
    (SELECT f_ID, ABS(b.f_date-a.f_date)*24 AS duration 
    FROM my_table a 
     JOIN my_table b USING (f_ID) 
    WHERE a.f_type = 'A'  
     AND a.f_type = 'B') 
SELECT AVG(duration) 
FROM t; 
+0

「ORA-01722:無效號碼」在f_date。請注意,f_date是字符串類型。 – Chino

+0

這太愚蠢了!進行類似'TO_DATE(b.f_date,'FmMM/FmDD/RR FmHH:FmMI:ss AM') - TO_DATE(a.f_date,'FmMM/FmDD/RR FmHH:FmMI:ss AM') –