powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как просуммировать время?
11 сообщений из 11, страница 1 из 1
Как просуммировать время?
    #32118809
Dmyttro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть: поле с временем в формате часы:минуты:секунды (01:25:12).
Подскажите, плз, как просуммировать записи по этому полю, чтобы получить общее время в этом же формате.
Вариант

SELECT CDate(Sum([Таблица]![Время]))
FROM Таблица;

подходит только для случая, когда общее время не превышает 24 часа (точнее, 23:59:59). А хотелось бы получить, например, 508:12:30.
Вариант с "выщемлением" отдельно часов, отдельно минут, отдельно секунд, суммированием и преобразованием довольно накладен, неужели нельзя сделать попроще?
...
Рейтинг: 0 / 0
Как просуммировать время?
    #32118921
Фотография Savik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кроме "выщемления" иначе никак, разве что можно чуть упростить, используя datediff(). Но это и правильно - 508:12:30 - не переменная типа date.
...
Рейтинг: 0 / 0
Как просуммировать время?
    #32119442
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Можно суммировать обычным сложением. От полученного результата можно взять:

часы = Hour(X) + Int(X) * 24
минуты = Minute(X)
секунды = Second(X)
...
Рейтинг: 0 / 0
Как просуммировать время?
    #32119907
Фотография Savik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не получится так просто. Если просуммировать "13:0:0" и "13:0:0" и от результата взять Hour(), получим 2, а не 26, потому что 24 уйдет в дни.
...
Рейтинг: 0 / 0
Как просуммировать время?
    #32120028
Dmyttro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо всем откликнувшимся.
К сожалению, ваши ответы подтвердили мои самые грустные предположения. Пришлось поизвращаться. На самом деле таблица содержит более 80 000 записей, да плюс происходит группировка по другим полям. Так что время выполнения запроса, сами понимаете...
Путем чисто субъективного анализа (типа с секундомером) пришел к выводу, что наиболее быстро он выполняется "комбинированным путем" - часы суммируются путем раскладывания времени по часам-минутам-секундам, а минуты и секунды с применением ф-ции CDate. Результат, естетсвенно, в текстовом виде. Упрощенно енто дело выглядит так:

SELECT int(Sum(Left([таблица].[Время],2)*3600+Mid([таблица].[Время],4,2)*60+Right([таблица].[Время],2))/3600)& ":" & format(CDate(Sum([таблица].[Время])),"nn:ss")
FROM таблица;

Еще раз спасибо всем за внимание.
...
Рейтинг: 0 / 0
Как просуммировать время?
    #32120103
virtart
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А может не вызывать функции Left Mid Right 80000 раз путем:

public function sumHourMinSec (iDate As Date) As Variant
Dim str As String, h As Long, m As Long, s As Long, tempDate As Date
h=Datediff("h",iDate,"00:00:00 AM")
tempDate=DateAdd("h",h,"00:00:00 AM")
m=Datediff("n",(iDate-tempDate),"00:00:00 AM")
tempDate=tempDate+ DateAdd("n",m,"00:00:00 AM")
s=Datediff("s",(iDate-tempDate),"00:00:00 AM")
str=Format(h,"#####0") & ":" & Format(m,"00") & ":" & Format(s,"00")
sumHourMinSec = str
end function
'Код не проверял, но должен работать!

Затем по тексту
SELECT Sum([таблица].[Время]) As sumDate FROM таблица;
обзываем qryCalcSum
и затем
SELECT sumHourMinSec(sumDate) As mySum FROM qryCalcSum;
...
Рейтинг: 0 / 0
Как просуммировать время?
    #32120741
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
To Savik

Я написал Hour(X) + Int(X) * 24, а не Hour(X).
...
Рейтинг: 0 / 0
Как просуммировать время?
    #32120889
Фотография Savik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Владимир Саныч
Приношу извинения, поторопился.

2 Dmyttro
IMHO, вариант Владимира Саныча самый подходящий.
...
Рейтинг: 0 / 0
Как просуммировать время?
    #32121412
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
To Savik

1. Принимается.
2. Спасибо. :^)))
...
Рейтинг: 0 / 0
Как просуммировать время?
    #32121985
Dmyttro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо еще раз, отдельный сэнкс Владимиру Санычу. Окончательный вид запроса получился примерно следующим:

select hour([Подзапрос].[Времечко])+int([Подзапрос].[Времечко])*24 & format([Подзапрос].[Времечко],':nn:ss') as [Общее время]
from
(select cdate(sum(Таблица.Время)) as [Времечко]
from Таблица) as [Подзапрос]

При использовании hour() & ":" minute() & ":" & second() результат получался не очень красивым, например 115:0:12 или 10:12:5. Если применял format(minute())..., то работает заметно дольше, чем вышеописанный.
...
Рейтинг: 0 / 0
Как просуммировать время?
    #32122049
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
To Dmyttro

Сэнкс за сэнкс. :^)
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как просуммировать время?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]