这对于日常的数据库专家来说可能微不足道... 我不是这个角色。因此,我们将不胜感激。
我有一个系统来捕获项目的创建和完成日期(称其为任务)。我想知道哪些任务需要花费最长的时间才能完成,而且通常是平均完成时间。
理想的输出:
Task Name | Average Completion Time
----------------------------------------------------
•任务表 •清单表(任务集) o清单包含创建日期(当还创建了其中的所有任务时) •任务实例(对任务的引用) o实例包含完成日期
我可以从已完成的任务实例中获取DATEDIFF(天数,清单,创建的清单,taskinstance.completed)。
我的结果是这样的:
Task 1 | 3 days
Task 1 | 10 days
Task 1 | 5 days
Task 2 | 2 days
Task 2 | 12 days
select t.[Description], ci.CreatedDateTime, cit.CompletedDateTime, DATEDIFF(day, ci.CreatedDateTime, cit.CompletedDateTime) as 'Days'
from checklistinstancetask cit
join checklistinstance ci on ci.Id = cit.ChecklistInstanceId
join Task t on t.Id = cit.TaskId
where cit.IsActive <> 0
order by 'Days' desc
我想汇总任务并获得我从DATEDIFF返回的报告的平均值,因此它应该给我:
任务1 | 6天 任务2 | 7天
任何有关此查询的帮助都将非常棒。
答案 0 :(得分:1)
您需要GROUP BY
:
select t.[Description],
avg(1.0 * datediff(day, ci.CreatedDateTime, cit.CompletedDateTime)) as Days
from checklistinstancetask cit join
checklistinstance ci
on ci.Id = cit.ChecklistInstanceId join
Task t
on t.Id = cit.TaskId
where cit.IsActive <> 0
group by t.[Description]
order by Days desc;
答案 1 :(得分:0)
我进行了此查询,但不确定是否最佳:
SELECT Results.Task, AVG(T1.Days) as 'Average Completion Time'
FROM
(SELECT t.[Description] as 'Task', DATEDIFF(day, ci.CreatedDateTime, cit.CompletedDateTime) as 'Days'
from checklistInstanceTask cit
join checklistInstance ci on ci.Id = cit.ChecklistInstanceId
join Task t on t.Id = cit.TaskId
where cit.CompletedStatusId <> 0
) as [Results]
GROUP BY Results.Task
ORDER BY 'Average Completion Time' DESC