Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Среднее время разницы двух дат в минутах  [new]
Marin_1a
Member

Откуда:
Сообщений: 125
Добрый день!
Вопрос по нахождению среднего времени разницы двух дат в минутах.
Использовала такой вариант с DATEDIFF,но результат не подходит,так как необходимо группировка только по NAME.
То есть по определенному человеку вынести его среднее время решения.

SELECT NAME, DATEDIFF(HOUR, START_DATE, END_DATE)
FROM [dbo].[DB1]
GROUP BY NAME, START_DATE, END_DATE

Подскажите пожалуйста как можно это получить?
Благодарю!
5 май 17, 07:14    [20458864]     Ответить | Цитировать Сообщить модератору
 Re: Среднее время разницы двух дат в минутах  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20527
Ну если нужно СРЕДНЕЕ - надо использовать соотв. групповую функцию. Заодно и лишние поля из выражения группировки уберутся...

SELECT [name], AVG(DATEDIFF(MINUTE, start_date, end_date)) average_time
FROM [dbo].[db1] 
GROUP BY [name]
5 май 17, 07:36    [20458893]     Ответить | Цитировать Сообщить модератору
 Re: Среднее время разницы двух дат в минутах  [new]
Руслан Дамирович
Member

Откуда: Резиновая нерезиновая
Сообщений: 940
Akina
...
AVG(DATEDIFF(MINUTE, start_date, end_date)) average_time

...

Не правильно ты среднее считаешь, дядя Федор

SELECT 
  [name],
  [average_time_int] = AVG( DATEDIFF( MINUTE, [start_date], [end_date] ) ),
  [average_time_flt] = AVG( 1.0 * DATEDIFF( MINUTE, [start_date], [end_date] ) ) 
FROM (
  VALUES 
    ( 'А', DATEADD( MINUTE, -10, GETDATE() ), DATEADD( MINUTE,  -8, GETDATE() ) ),
    ( 'А', DATEADD( MINUTE,  -7, GETDATE() ), DATEADD( MINUTE,  -6, GETDATE() ) )
  ) tst( [name], [start_date], [end_date] )
GROUP BY 
  [name]
5 май 17, 09:34    [20459275]     Ответить | Цитировать Сообщить модератору
 Re: Среднее время разницы двух дат в минутах  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20527
Руслан Дамирович
Не правильно ты среднее считаешь, дядя Федор
В том смысле, что у меня считается целое? дык оно как-то автором не описано, так что делаю как хочу.
5 май 17, 09:48    [20459349]     Ответить | Цитировать Сообщить модератору
 Re: Среднее время разницы двух дат в минутах  [new]
Руслан Дамирович
Member

Откуда: Резиновая нерезиновая
Сообщений: 940
Akina
Руслан Дамирович
Не правильно ты среднее считаешь, дядя Федор
В том смысле, что у меня считается целое? дык оно как-то автором не описано, так что делаю как хочу.

Так о том и "цитата" :)
5 май 17, 09:51    [20459365]     Ответить | Цитировать Сообщить модератору
 Re: Среднее время разницы двух дат в минутах  [new]
iap
Member

Откуда: Москва
Сообщений: 46977
Что такое "время разницы двух дат" ??
5 май 17, 09:55    [20459385]     Ответить | Цитировать Сообщить модератору
 Re: Среднее время разницы двух дат в минутах  [new]
Руслан Дамирович
Member

Откуда: Резиновая нерезиновая
Сообщений: 940
iap
Что такое "время разницы двух дат" ??

К словам придираешься? Тут хотя бы логика вопроса прослеживается, не то, что у некоторых.
( Разница двух дат - время & Нужно вычислить среднее время ) = Среднее время разницы двух дат.
5 май 17, 10:01    [20459419]     Ответить | Цитировать Сообщить модератору
 Re: Среднее время разницы двух дат в минутах  [new]
rnk
Member

Откуда:
Сообщений: 126
Руслан Дамирович
Akina
...
AVG(DATEDIFF(MINUTE, start_date, end_date)) average_time

...

Не правильно ты среднее считаешь, дядя Федор

SELECT 
  [name],
  [average_time_int] = AVG( DATEDIFF( MINUTE, [start_date], [end_date] ) ),
  [average_time_flt] = AVG( 1.0 * DATEDIFF( MINUTE, [start_date], [end_date] ) ) 
FROM (
  VALUES 
    ( 'А', DATEADD( MINUTE, -10, GETDATE() ), DATEADD( MINUTE,  -8, GETDATE() ) ),
    ( 'А', DATEADD( MINUTE,  -7, GETDATE() ), DATEADD( MINUTE,  -6, GETDATE() ) )
  ) tst( [name], [start_date], [end_date] )
GROUP BY 
  [name]


Брать разницу через DATEDIFF в минутах - грубо. Я бы считал секунды (если даже не миллисекунды), а потом уже преобразовывал в минуты:
SELECT 
  [name],
  [average_time_int] = AVG( DATEDIFF( MINUTE, [start_date], [end_date] ) ),
  [average_time_flt_rough] = AVG( 1.0 * DATEDIFF( MINUTE, [start_date], [end_date] ) ),
  [average_time_flt_sec] = AVG(DATEDIFF( SECOND, [start_date], [end_date] )/60.0 ),
  [average_time_flt_ms] = AVG(DATEDIFF( MILLISECOND, [start_date], [end_date] )/60000.0 ) 
FROM (
  VALUES 
    ( 'А', DATEADD( MILLISECOND, -1067223, GETDATE() ), DATEADD( MILLISECOND,  -301158, GETDATE() ) ),
    ( 'А', DATEADD( MILLISECOND,  -721658, GETDATE() ), DATEADD( MILLISECOND,  -634089, GETDATE() ) ),
    ( 'А', DATEADD( MILLISECOND,  -411095, GETDATE() ), DATEADD( MILLISECOND,  -216550, GETDATE() ) )
  ) tst( [name], [start_date], [end_date] )
GROUP BY 
  [name]

Как видно, точности DATEDIFF в минутах недостаточно.
5 май 17, 15:02    [20460978]     Ответить | Цитировать Сообщить модератору
 Re: Среднее время разницы двух дат в минутах  [new]
Руслан Дамирович
Member

Откуда: Резиновая нерезиновая
Сообщений: 940
rnk
Как видно, точности DATEDIFF в минутах недостаточно.


По мне, так для целей статистики средняя разница времён - как средняя температура по больнице - для процесса полураспада частиц, может и имеет смысл; но я подозреваю, что задачи ТС далеки от познания основ мироздания.
В задачах разницы времён больше подойдет вариант с группировки по диапазонам этих разниц, но это всего лишь умозрительное заключение. Может и правда, у ТСа там период полураспада контролируется...
5 май 17, 15:10    [20461024]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить