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

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

Запрос:

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

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

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

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

--
Regards
Alexander Artamonov

Posted via ActualForum NNTP Server 1.1
...
Рейтинг: 0 / 0
22.11.2004, 15:56:02
    #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
22.11.2004, 15:58:46
    #32794456
Rivkin Dmitry
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как просуммировать часы?
FinansСкладывать значения формата "Краткий формат времени" всё равно, что складывать даты: (22-ноя-2004) + (23-ноя-2004). Продолжительность каких-то событий необходимо хранить в единицах (часах, минутах, ..), т.е. в числовом формате.

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

SELECT T1.Организация, Sum(CDate(T1.время_работы)) AS [Sum-время_работы]
FROM T1
GROUP BY T1.Организация
...
Рейтинг: 0 / 0
22.11.2004, 17:04:02
    #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
22.11.2004, 17:10:10
    #32794680
АлексейК
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как просуммировать часы?
а так?

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


Но часы нужны не от 0 а только остаток, а тогда сложно выходит
...
Рейтинг: 0 / 0
22.11.2004, 17:23:01
    #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
23.11.2004, 08:37:41
    #32795178
Shark
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как просуммировать часы?
Че вы тут обсуждаете не пойму. Девушка имхо просто неверный тип данных для поля выбрала. Поле Время_работы должно быть карренси. И все.
...
Рейтинг: 0 / 0
23.11.2004, 10:31:20
    #32795348
Iskander68
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как просуммировать часы?
Шарк, а почему именно карренси - а не дабл или сингл?

--
Regards
Alexander Artamonov

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


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

--
Regards
Alexander Artamonov

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


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