我想获得特定时间段内每个user_id
的平均值。
由于RIGHT
适用于字符串,我必须将其转换为int
并获得平均值。
因此我得到错误:
转换varchar值时转换失败' 08:36'数据 输入int。
SELECT
user_id,
avg(convert (int , right('0' + convert(VARCHAR(2),datediff (second, QueueEndDt,ConnClearDt)/ 60 % 60), 2) + ':' +
right('0' + convert(VARCHAR(2),datediff (second, QueueEndDt,ConnClearDt)% 60),2))) as average_minutes
FROM Detail
WHERE QueueEndDt between '2015-02-09 08:00:00.000' AND '2015-02-09 23:02:33.043'
group by user_id
如果不使用平均值并转换,我会得到正确的datediff
。
我用http://sqlfiddle.com/#!6/298eb制作了一些数据。
我想输出的是每个user_id的平均值。
答案 0 :(得分:1)
这将返回hh:mm:ss
格式的平均差异。请注意,hh
可能会超过24.修改查询以添加年,月和日部分。
WITH CTE AS(
SELECT
user_id,
Average_Seconds = AVG(DATEDIFF(SECOND, QueueEndDt, ConnClearDt))
FROM details
WHERE
QueueEndDt BETWEEN '2015-02-09 08:00:00.000' AND '2015-02-09 23:02:33.043'
GROUP BY user_id
)
SELECT
user_id,
[Average hh:mm:ss] =
CONVERT(VARCHAR(12), Average_Seconds / 60 / 60) + ':'
+ RIGHT('00' + CONVERT(VARCHAR(2), Average_Seconds / 60 % 60), 2) + ':'
+ RIGHT('00' + CONVERT(VARCHAR(2), Average_Seconds % 60), 2)
FROM CTE
<强> RESULT 强>
user_id Average hh:mm:ss
---------- ------------------
number1 13:44:16
number2 13:50:36
number3 13:46:33