2009-06-17 229 views
1

我在MSSQL以下查詢:SQL平均時間

select 
TRANSACTION_TYPE_ID 
,COUNT(TRANSACTION_TYPE_ID)AS NUMBER_OF_TRANSACTIONS 
,CAST(SUM(AMOUNT)AS DECIMAL (30,2)) AS TOTAL 
FROM 
    [ONLINE_TRANSACTION] 
WHERE CONVERT(CHAR(8), CREATED_ON, 114) >='17:30' AND AMOUNT IS NOT NULL AND  
TRANSACTION_TYPE_ID !='CHEQUE-STOP-TRANS-TYPE' 
GROUP BY TRANSACTION_TYPE_ID 
ORDER BY TRANSACTION_TYPE_ID 

我想表明交易TRANSATION_TYPE_ID爲每種類型的事務上面一樣,但也平均時間這些交易發生的總金額以上的類型CREATED_ON這是datetime我還沒有找到一個這樣做的好方法?

回答

1

一種方法是將時間轉換爲秒,計算平均值,然後將結果轉換回小時,分鐘和秒。

+0

好主意,我有點找一些源代碼指針感謝蘭多夫 – Andreas 2009-06-17 08:58:03

3

基於倫道夫·波特的答案,你可以找到的平均時間,如:

avg(DATEPART(hh,created_on)*60 + DATEPART(mi,created_on)) % 24 as AvgHour, 
avg(DATEPART(hh,created_on)*60 + DATEPART(mi,created_on))/24 as AvgMinute 
+0

,我發現這個解決方案藏漢 - >(stackoverflow.com/questions/529144/...)CONVERT(VARCHAR,CAST( AVG(CAST(CAST(LEFT(created_on,12)as datetime)AS FLOAT))AS DATETIME),114)+'0'AS AVARAGE_TIME實現Andomars的回覆和上面提到的那個,我得到了不同的結果。 ? – Andreas 2009-06-17 09:47:36

1

如果你談論一天的時間,而不是希望得到一個特定的日期,即。 5:32而不是2012年1月4日5:32,下面的內容可能會有所幫助。對大寫字母抱歉,這是我習慣於編寫SQL的方式。

CONVERT(VARCHAR,AVG(DATEPART(HH,CREATED_ON)*60 + DATEPART(MI,CREATED_ON))/60) + ':' + 
CASE WHEN CONVERT(VARCHAR,AVG(DATEPART(HH,CREATED_ON)*60 + DATEPART(MI,CREATED_ON)) % 60) < 10 
    THEN '0'+CONVERT(VARCHAR,AVG(DATEPART(HH,CREATED_ON)*60 + DATEPART(MI,CREATED_ON)) % 60) 
    ELSE CONVERT(VARCHAR,AVG(DATEPART(HH,CREATED_ON)*60 + DATEPART(MI,CREATED_ON)) % 60) 
END AS AVG_CREATED_ON 
1
SELECT FROM_UNIXTIME((ROUND((UNIX_TIMESTAMP(floor(timestamp_column))/ 60),0) * 60)) rounded_time 
FROM mysql_table 
WHERE timestamp_column BETWEEN STR_TO_DATE('31/07/2012','%d/%m/%Y') 
AND STR_TO_DATE('01/08/2012','%d/%m/%Y')