SQL Средний подзапрос - PullRequest
0 голосов
/ 11 июля 2019

Это, вероятно, тривиально для ежедневного гуру базы данных ... Я не в этой роли.Так что .. помощь будет принята.

У меня есть система, которая фиксирует дату создания и завершения для элементов (назовите их задачами).Я хочу знать, какие задачи выполняются дольше всего, и, как правило, среднее время завершения.

Идеальный результат:

Task Name | Average Completion Time
----------------------------------------------------

Таблицы:

• Таблица задач • Таблица контрольных списков(набор задач) o Контрольный список содержит дату создания (когда также создаются все задачи внутри) • Экземпляр задачи (ссылка на задачу) o Экземпляр содержит дату завершения

Я могу получить DATEDIFF (days, checklist.created,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 дней

Любая помощь по этому запросу будет потрясающе ..

Ответы [ 2 ]

1 голос
/ 11 июля 2019

Вам нужно 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;
0 голосов
/ 11 июля 2019

Я пошел с этим запросом, но не уверен, что он оптимален:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...