powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как просуммировать часы?
25 сообщений из 37, страница 1 из 2
Как просуммировать часы?
    #32794336
Mari.P
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть таблица T1 Организация,время_работы,стоимость_работ

формат данных поля Время_работы - краткий формат времени.

Запрос:

SELECT T1.Организация, Sum(T1.время_работы) AS [Sum-время_работы]
FROM T1
GROUP BY T1.Организация;

Естественно Sum(T1.время_работы) работает неправильно. Подскажите плиз как правильно просуммировать время с группировкой по организации
...
Рейтинг: 0 / 0
Как просуммировать часы?
    #32794384
Rivkin Dmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если Время_работы - краткий формат времени не превышает 24 часов, то можно воспользоваться функцией CDbl
SELECT T1.Организация, Sum(CDbl(T1.время_работы)) AS [Sum-время_работы]
FROM T1
GROUP BY T1.Организация

В противном случае - несколько сложнее, надо будет переводитьвремя в фомат даты, те день, как целое число и опять же CDbl на оставшуюся часть.

Но это не все, для того чтобы теперь показать Sum-время_работы, например в формате ччч:мм нужна будет функция переводящая Double в стринг
...
Рейтинг: 0 / 0
Как просуммировать часы?
    #32794419
Фотография Finans
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Складывать значения формата "Краткий формат времени" всё равно, что складывать даты: (22-ноя-2004) + (23-ноя-2004). Продолжительность каких-то событий необходимо хранить в единицах (часах, минутах, ..), т.е. в числовом формате.
...
Рейтинг: 0 / 0
Как просуммировать часы?
    #32794422
Mari.P
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Функцию написать - можно конечно, вот только как обратиться к этой функции в запросе???
...
Рейтинг: 0 / 0
Как просуммировать часы?
    #32794436
Iskander68
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А зачем бы ее тогда писать, если бы к ней нельзя было обратиться? :-) Точно
также, как ко встроенным функциям - имя, аргументы, если есть.

--
Regards
Alexander Artamonov

Posted via ActualForum NNTP Server 1.1
...
Рейтинг: 0 / 0
Как просуммировать часы?
    #32794443
Rivkin Dmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mari.PФункцию написать - можно конечно, вот только как обратиться к этой функции в запросе???

А чего сложного?

Допустим, ф-ия такая:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
Function DoubleToTime(ts As Double, Optional WithOutSec As Boolean) As String
    Dim t As Double, S As String

    t = ts *  24  *  60  *  60    'sec
    S = Format(Int(t \  3600 ), "00") & ":"
    t = t Mod  3600 
    S = S & Format(Int(t \  60 ), "00")
    If WithOutSec Then
        S = S & ":"
        t = t Mod  60 
        S = S & Format(t, "00")
    End If
    
    DoubleToTime = S

End Function

Твой запрос сохраняем, например в ААА и тогда

Код: plaintext
1.
SELECT ААА.Организация, DoubleToTime(ААА.[Sum-время_работы],  0 ) AS время_работы
FROM ААА
...
Рейтинг: 0 / 0
Как просуммировать часы?
    #32794456
Rivkin Dmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FinansСкладывать значения формата "Краткий формат времени" всё равно, что складывать даты: (22-ноя-2004) + (23-ноя-2004). Продолжительность каких-то событий необходимо хранить в единицах (часах, минутах, ..), т.е. в числовом формате.

Формат даты на самом деле и есть числовой формат (Double )
...
Рейтинг: 0 / 0
Как просуммировать часы?
    #32794458
Mari.P
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо за помощь, но если время больше 24 часов то запрос вернет ерунду?
...
Рейтинг: 0 / 0
Как просуммировать часы?
    #32794493
Rivkin Dmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mari.PСпасибо за помощь, но если время больше 24 часов то запрос вернет ерунду?
Ну почему же ерунду? Он вернет: смешанное число, целая часть которого - количество дней, тк при умножении не 24 - кол-во часов, а дробная часть - это части дня: 1 сек = 1/24/60/60. Отсюда и пляшем!
...
Рейтинг: 0 / 0
Как просуммировать часы?
    #32794579
Mari.P
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо щас применим на практике
...
Рейтинг: 0 / 0
Как просуммировать часы?
    #32794622
Фотография АлексейК
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
так не получится?

SELECT T1.Организация, Sum(CDate(T1.время_работы)) AS [Sum-время_работы]
FROM T1
GROUP BY T1.Организация
...
Рейтинг: 0 / 0
Как просуммировать часы?
    #32794667
Rivkin Dmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
АлексейКтак не получится?

SELECT T1.Организация, Sum(CDate(T1.время_работы)) AS [Sum-время_работы]
FROM T1
GROUP BY T1.Организация

Получается следующее:
CurrentDb.Execute "create table t (h time)"

CurrentDb.Execute "INSERT INTO t (h) VALUES ( ""12:20"")"
CurrentDb.Execute "INSERT INTO t (h) VALUES ( ""12:20"")"
CurrentDb.Execute "INSERT INTO t (h) VALUES ( ""12:20"")"
CurrentDb.Execute "INSERT INTO t (h) VALUES ( ""12:20"")"
CurrentDb.Execute "INSERT INTO t (h) VALUES ( ""12:20"")"
CurrentDb.Execute "INSERT INTO t (h) VALUES ( ""12:20"")"

SELECT Sum(CDate([h])) AS HH
FROM t;
результат: 3.0833333333333

Применяем мою функцию, получаем
?DoubleToTime(3.0833333333333,0)
74:00
...
Рейтинг: 0 / 0
Как просуммировать часы?
    #32794680
Фотография АлексейК
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а так?

Код: plaintext
1.
SELECT datediff( "h", 0  ,Sum(CDate([h]))) AS HH
FROM t
...
Рейтинг: 0 / 0
Как просуммировать часы?
    #32794693
Фотография АлексейК
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
SELECT datediff( "n", 0  ,Sum(CDate([h])))      AS minutes
FROM t
...
Рейтинг: 0 / 0
Как просуммировать часы?
    #32794702
Rivkin Dmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
АлексейК
Код: plaintext
1.
SELECT datediff( "n", 0  ,Sum(CDate([h])))      AS minutes
FROM t


Но часы нужны не от 0 а только остаток, а тогда сложно выходит
...
Рейтинг: 0 / 0
Как просуммировать часы?
    #32794712
Rivkin Dmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Примерно так:

SELECT datediff( "h",0 ,Sum(CDate([h]))) & ":" & format(datediff( "n",datediff( "h",0 ,Sum(CDate([h])))/24 ,Sum(CDate([h]))),"00") as WorkTime
FROM t
...
Рейтинг: 0 / 0
Как просуммировать часы?
    #32795178
Фотография Shark
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Че вы тут обсуждаете не пойму. Девушка имхо просто неверный тип данных для поля выбрала. Поле Время_работы должно быть карренси. И все.
...
Рейтинг: 0 / 0
Как просуммировать часы?
    #32795348
Iskander68
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Шарк, а почему именно карренси - а не дабл или сингл?

--
Regards
Alexander Artamonov

Posted via ActualForum NNTP Server 1.1
...
Рейтинг: 0 / 0
Как просуммировать часы?
    #32795859
Фотография Shark
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У карренси целочисленная арифметика. Там 2+2 всегда 4. А с этими мантиссами я наелся, спасибо. Всякие (2+2>4-e) and (2+2<4+e)
НИКОГДА не надо использовать эту гадость, разве что звезду понадобится в килограммах измерить:-)
...
Рейтинг: 0 / 0
Как просуммировать часы?
    #32795962
Rivkin Dmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shark
Можно по-подробнее? Какая разница между Date, Currency и Double в этом случае? Если хранить время (чч:мм) в Currency или в каком другом числовом типе (кроме целочисленного), то число в любом случае будет дробным. Так при чем здесь рассуждения про 2+2 = 4?
...
Рейтинг: 0 / 0
Как просуммировать часы?
    #32796097
Фотография Shark
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Можно поподробнее
Можно.
Девушке не надо хранить время. И формат ДатаВремя тут не причем, он не предназначен для хранения промежутков времени, он предназначен для записи конкретного времени и даты. Нужно записать просто дробное число(количество человекочасов или человеколет). А для записи дробных чисел правильнее использовать карренси, а не дабл, потому что дважды два :^)
...
Рейтинг: 0 / 0
Как просуммировать часы?
    #32796273
Rivkin Dmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Думаю, что все это - дело вкуса! Действительно, нет подходящего формата для хранения промежутков времени. Если они (промежутки) гарантированно меньше 24 часов, мне больше нравится хранить их как есть в формате времени.Легче при показе в формах и отчетах. При необходимости проведения над ними арифметических вычеслений, можно пользоваться почти всеми встроенными функциями времени и даты. Неудобства возникают только при превышении в сумме единицы. Но и эта проблема достаточно легко решается при помощи вышеизложенных вычисений или функций.
А при применении типа денег, как то не очень приятно видеть в напрямую открытой таблице символ доллара или фунта или еще какой-нибудь деньги (шекеля к примеру) вместо ожидаемых 00:00
...
Рейтинг: 0 / 0
Как просуммировать часы?
    #32796911
не шарк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Rivkin Dmitry...А при применении типа денег, как то не очень приятно видеть в напрямую открытой таблице символ доллара или фунта или еще какой-нибудь деньги (шекеля к примеру) вместо ожидаемых 00:00
А не пробовали в денежном типе РУЧКАМИ вбить в формат поля таблицы hh:nn:ss ? Сильно помогает от шекелей. (но мешает вбивать больше 24 часов) (жаль нет смешанных форматов).


Единственный сущ-й вопрос - об арифметике в дробной части. Если она "целочисленная" и для поля типа "дата время", для которого известно, что внутреннее представление его - "вещественное число" (формат типа данных не указан) - то нет проблем. Для currency она (арифметика) целочислена по умолчанию.
...
Рейтинг: 0 / 0
Как просуммировать часы?
    #32797135
Фотография Shark
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Думаю, что все это - дело вкуса.
ну ну.
Первое- действительно, не надо путать тип данных и свойство формат контрола, в котором они показаны.
Второе- я устал объяснять про грабли, что 1,25+2,75 будет 3,9999999999
Если Вам это не важно, выбирайте тип в соответствии со своим вкусом :-)
Успехов в быстрой разработке отчетов и прямом просмотре таблиц:^)
...
Рейтинг: 0 / 0
Как просуммировать часы?
    #32797375
Iskander68
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Шарк, логика в применении денежного типа для выражения промежутка времени
есть. А вот как наиболее удобным образом его использовать в контексте часов
и минут?

--
Regards
Alexander Artamonov

Posted via ActualForum NNTP Server 1.1
...
Рейтинг: 0 / 0
25 сообщений из 37, страница 1 из 2
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как просуммировать часы?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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