Как рассчитать среднее время разговора в Microsoft Access

В моей базе данных есть поле для общего времени, которое специалист проводит на телефоне, и еще одно поле для общего количества принятых звонков. Я пытаюсь рассчитать среднюю продолжительность вызова, но Access не возвращает число в формате чч:мм:сс без некоторого кодирования. Я очень новичок в написании вещей на VBA. Я попытался изменить формат в поле «Средняя продолжительность вызова» на «Длинное время», но оно показывает время суток, а не среднюю продолжительность, или я неправильно смотрю?

Кто-нибудь еще сталкивался с подобной проблемой, и если да, то как вы ее обошли?

Любая помощь будет оценена

Спасибо!


person gkneib    schedule 08.12.2015    source источник
comment
Каковы типы данных ваших столбцов total time и total calls? Можете ли вы предоставить несколько примеров записей и ожидаемый результат? Также было бы неплохо увидеть, что вы делаете прямо сейчас, чтобы получить ответ (если он вообще близок к работе)   -  person Brad    schedule 09.12.2015
comment
общее время — это общее количество времени, которое кто-то тратит на телефон в течение данного месяца, и общее количество звонков, сделанных каждым человеком в течение месяца. Они оцениваются по средней продолжительности звонков как за месяц, так и за год. Я думаю, что часть проблемы, с которой я сталкиваюсь, заключается в том, что я не могу ввести 17:42:27, так как общее время в месяц без Access думает, что я ввожу 5:42. ВЕЧЕРА   -  person gkneib    schedule 09.12.2015


Ответы (2)


Если время записывается с использованием типа данных Дата, вы можете использовать запрос:

Select CDate(Avg([TimeSpent])) As TotalTimeSpent
From YourTable

Возможно, вам придется указать формат поля: h:nn

Если ваши часы превысят 24, вам придется использовать функцию для создания чтения чч: нн:

Public Function FormatHourMinute( _
  ByVal datTime As Date, _
  Optional ByVal strSeparator As String = ":") _
  As String

' Returns count of days, hours and minutes of datTime
' converted to hours and minutes as a formatted string
' with an optional choice of time separator.
'
' Example:
'   datTime: #10:03# + #20:01#
'   returns: 30:04
'
' 2005-02-05. Cactus Data ApS, CPH.

  Dim strHour       As String
  Dim strMinute     As String
  Dim strHourMinute As String

  strHour = CStr(Fix(datTime) * 24 + Hour(datTime))
  ' Add leading zero to minute count when needed.
  strMinute = Right("0" & CStr(Minute(datTime)), 2)
  strHourMinute = strHour & strSeparator & strMinute

  FormatHourMinute = strHourMinute

End Function

а затем скорректируйте запрос:

Select FormatHourMinute(CDate(Avg([TimeSpent]))) As TotalTimeSpent
From YourTable
person Gustav    schedule 09.12.2015
comment
Если я преобразую время в строку, я не смогу использовать это в расчетах, верно? - person gkneib; 09.12.2015
comment
Да, дата/время в виде строки предназначены только для отображения, и их следует избегать для хранения. - person Gustav; 09.12.2015

Поле времени в access предназначено для хранения моментов времени, а не длительности. Хотя вы, возможно, выбрали «Длинное время» в качестве формата отображения, доступ по-прежнему сохраняет его как определенную дату. Вы можете попробовать это, когда вы отформатируете поле даты и времени как longtime, введите в него некоторые данные, а затем измените формат на tt.mm.jjjj hh:nn:ss, это даст вам некоторое время 30 декабря 1899 года - начальная дата времени доступа.

И если вы создадите запрос, который суммирует время типа «долгое время», и поместите tt.mm.jjjj hh:nn:ss в поле формата, он покажет вам более позднюю дату, как только сумма превысит 24 часа.

Таким образом, чтобы работать с длительностью, вы обычно сохраняете все с наименьшей необходимой вам точностью (часы, минуты, секунды, века) в числовом поле и вычисляете все оттуда. Будет намного проще (и безопаснее) вводить данные в форму, чем напрямую в таблицу данных, поэтому вы можете использовать поля времени, которые автоматически преобразуют продолжительность.

person Johanness    schedule 10.12.2015