我有一个简单的存储过程,我用它来显示一些基本的用户统计信息。我正在显示提交的总数,所有这些提交的总花费时间以及平均花费的时间。
我遇到了两个问题。首先,当内部选择中有多个记录时,这会中断。
我的第二个问题是如何正确计算该用户所有记录的平均时间。
有人可以指出一些方法我可以更改下面的代码,以获得所有记录的总时间和平均时间,而不只是一个?
SELECT count(itemID) AS totalSubmissions,
CONVERT(VARCHAR(20), GETUTCDATE(), 100) as lastUpdate,
(
SELECT COALESCE(DATEDIFF(MINUTE, s.startTime, s.endTime + 1) , 0)
FROM itemTracker_records as s
WHERE QID = @QID
) as totalTime,
(
SELECT COALESCE(DATEDIFF(MINUTE, s.startTime, s.endTime + 1) , 0)
FROM itemTracker_records as s
WHERE QID = @QID
) as averageTime
FROM itemTracker_records
WHERE QID = @QID
FOR XML PATH ('results'), TYPE, ELEMENTS, ROOT ('root')
答案 0 :(得分:2)
AVG()
函数计算平均值。所以结果看起来与此相似:
SELECT count(r.itemID) AS totalSubmissions,
CONVERT(VARCHAR(20), GETUTCDATE(), 100) as lastUpdate,
sum(isnull(DATEDIFF(MINUTE, r.startTime, r.endTime) + 1 , 0)) as [totalTime],
avg(isnull(DATEDIFF(MINUTE, r.startTime, r.endTime) + 1 , 0)) as [averageTime]
FROM dbo.itemTracker_records r
WHERE r.QID = @QID
FOR XML PATH ('results'), TYPE, ELEMENTS, ROOT ('root');
最后但并非最不重要:永远不要忘记模式和对象别名,除非你故意试图混淆某人,包括你自己。