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

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

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

часы = Hour(X) + Int(X) * 24
минуты = Minute(X)
секунды = Second(X)
...
Рейтинг: 0 / 0
14.03.2003, 10:20
    #32119907
Savik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как просуммировать время?
Не получится так просто. Если просуммировать "13:0:0" и "13:0:0" и от результата взять Hour(), получим 2, а не 26, потому что 24 уйдет в дни.
...
Рейтинг: 0 / 0
14.03.2003, 12:14
    #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
14.03.2003, 13:13
    #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
16.03.2003, 13:26
    #32120741
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как просуммировать время?
To Savik

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

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

1. Принимается.
2. Спасибо. :^)))
...
Рейтинг: 0 / 0
18.03.2003, 12:45
    #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
18.03.2003, 13:20
    #32122049
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как просуммировать время?
To Dmyttro

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


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