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
我还没有找到一个这样做的好方法?
答
一种方法是将时间转换为秒,计算平均值,然后将结果转换回小时,分钟和秒。
答
基于伦道夫·波特的答案,你可以找到的平均时间,如:
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')
好主意,我有点找一些源代码指针感谢兰多夫 – Andreas 2009-06-17 08:58:03