#sql-server
Вопрос:
Я работаю с большим набором данных, который записывает все задания, выполненные для инструмента ETL. Существует около 1500 заданий, которые выполняются в день, и многие из них могут выполняться менее 10 секунд.
Что я пытаюсь сделать, так это получить некоторую статистику для времени выполнения этих периодов выполнения.
В идеале мне нужно было время выполнения всех заданий в день, и я выполнял этот запрос:
SELECT
RUNDATE = CAST(runstart AS date),
TOTALRUNTIME = CAST(DATEADD(ms, SUM(CAST(DATEDIFF(ms, '00:00:00', CAST(RUNTIME AS time)) AS BIGINT)), '00:00:00') AS Time)
FROM
"CADIS"."vwSolutionHistory"
GROUP BY
CAST(runstart AS date)
Однако это дало некоторые странные результаты.
Например, один день показал общее время выполнения 23:56:27,4833333, и в среднем у нас есть только задания, работающие около 11-12 часов в день, поэтому общее время выполнения 23 часа не имело смысла. Так что, если у кого-нибудь есть идеи о том, как это сделать, это было бы фантастически
В любом случае я пошел дальше и сгруппировал результаты также по названию, так что получаю сумму общего времени на работу в день
SELECT
RUNDATE = CAST(runstart AS date),
NAME,
TOTALRUNTIME = CONVERT(varchar(50), DATEADD(ms, SUM(DATEDIFF(ms, '00:00:00.000', RUNTIME)), '00:00:00.000'), 108)
FROM
"CADIS"."vwSolutionHistory"
WHERE
TIMESINCELASTENTRY IS NULL
GROUP BY
name, CAST(runstart AS date)
ORDER BY
2, 1
Что я хотел бы сделать в дополнение к этому, так это (1) получить общее время каждого раза в день (по приведенному выше запросу) (2) получить максимальное время, затрачиваемое на работу в день (3) Получить среднее время, затрачиваемое на работу в день (4) Получить минимальное время, затрачиваемое на работу в день
Однако я не уверен, как получить все эти 4 вещи в одном запросе.
Комментарии:
1. Учитывая, что время запуска и завершения многих заданий перекрывается… задумывались ли вы о том, что, возможно, задания выполняются параллельно?
2. Ввод образцов и ожидаемые результаты помогут