我在MSSQL中有以下查询:
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 :(得分:3)
根据Randolph Potter的回答,您可以找到平均时间:
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
答案 1 :(得分:1)
一种方法是将时间转换为秒,计算平均值,然后将其转换回结果的小时,分钟和秒。
答案 2 :(得分: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
答案 3 :(得分: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')