SQL平均时间

问题描述:

我在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我还没有找到一个这样做的好方法?

一种方法是将时间转换为秒,计算平均值,然后将结果转换回小时,分钟和秒。

+0

好主意,我有点找一些源代码指针感谢兰多夫 – Andreas 2009-06-17 08:58:03

基于伦道夫·波特的答案,你可以找到的平均时间,如:

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

如果你谈论一天的时间,而不是希望得到一个特定的日期,即。 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 

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')