|
|
|
Как просуммировать время?
|
|||
|---|---|---|---|
|
#18+
Есть: поле с временем в формате часы:минуты:секунды (01:25:12). Подскажите, плз, как просуммировать записи по этому полю, чтобы получить общее время в этом же формате. Вариант SELECT CDate(Sum([Таблица]![Время])) FROM Таблица; подходит только для случая, когда общее время не превышает 24 часа (точнее, 23:59:59). А хотелось бы получить, например, 508:12:30. Вариант с "выщемлением" отдельно часов, отдельно минут, отдельно секунд, суммированием и преобразованием довольно накладен, неужели нельзя сделать попроще? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2003, 21:31 |
|
||
|
Как просуммировать время?
|
|||
|---|---|---|---|
|
#18+
Кроме "выщемления" иначе никак, разве что можно чуть упростить, используя datediff(). Но это и правильно - 508:12:30 - не переменная типа date. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2003, 09:42 |
|
||
|
Как просуммировать время?
|
|||
|---|---|---|---|
|
#18+
Можно суммировать обычным сложением. От полученного результата можно взять: часы = Hour(X) + Int(X) * 24 минуты = Minute(X) секунды = Second(X) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2003, 15:12 |
|
||
|
Как просуммировать время?
|
|||
|---|---|---|---|
|
#18+
Не получится так просто. Если просуммировать "13:0:0" и "13:0:0" и от результата взять Hour(), получим 2, а не 26, потому что 24 уйдет в дни. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2003, 10:20 |
|
||
|
Как просуммировать время?
|
|||
|---|---|---|---|
|
#18+
Спасибо всем откликнувшимся. К сожалению, ваши ответы подтвердили мои самые грустные предположения. Пришлось поизвращаться. На самом деле таблица содержит более 80 000 записей, да плюс происходит группировка по другим полям. Так что время выполнения запроса, сами понимаете... Путем чисто субъективного анализа (типа с секундомером) пришел к выводу, что наиболее быстро он выполняется "комбинированным путем" - часы суммируются путем раскладывания времени по часам-минутам-секундам, а минуты и секунды с применением ф-ции CDate. Результат, естетсвенно, в текстовом виде. Упрощенно енто дело выглядит так: SELECT int(Sum(Left([таблица].[Время],2)*3600+Mid([таблица].[Время],4,2)*60+Right([таблица].[Время],2))/3600)& ":" & format(CDate(Sum([таблица].[Время])),"nn:ss") FROM таблица; Еще раз спасибо всем за внимание. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2003, 12:14 |
|
||
|
Как просуммировать время?
|
|||
|---|---|---|---|
|
#18+
А может не вызывать функции 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; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2003, 13:13 |
|
||
|
Как просуммировать время?
|
|||
|---|---|---|---|
|
#18+
To Savik Я написал Hour(X) + Int(X) * 24, а не Hour(X). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2003, 13:26 |
|
||
|
Как просуммировать время?
|
|||
|---|---|---|---|
|
#18+
2 Владимир Саныч Приношу извинения, поторопился. 2 Dmyttro IMHO, вариант Владимира Саныча самый подходящий. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2003, 09:43 |
|
||
|
Как просуммировать время?
|
|||
|---|---|---|---|
|
#18+
To Savik 1. Принимается. 2. Спасибо. :^))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2003, 17:23 |
|
||
|
Как просуммировать время?
|
|||
|---|---|---|---|
|
#18+
Спасибо еще раз, отдельный сэнкс Владимиру Санычу. Окончательный вид запроса получился примерно следующим: 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())..., то работает заметно дольше, чем вышеописанный. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2003, 12:45 |
|
||
|
|

start [/forum/topic.php?fid=45&msg=32121985&tid=1682081]: |
0ms |
get settings: |
10ms |
get forum list: |
19ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
42ms |
get topic data: |
14ms |
get forum data: |
4ms |
get page messages: |
69ms |
get tp. blocked users: |
2ms |
| others: | 218ms |
| total: | 384ms |

| 0 / 0 |
