|
|
|
Как просуммировать часы?
|
|||
|---|---|---|---|
|
#18+
Есть таблица T1 Организация,время_работы,стоимость_работ формат данных поля Время_работы - краткий формат времени. Запрос: SELECT T1.Организация, Sum(T1.время_работы) AS [Sum-время_работы] FROM T1 GROUP BY T1.Организация; Естественно Sum(T1.время_работы) работает неправильно. Подскажите плиз как правильно просуммировать время с группировкой по организации ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2004, 15:23:14 |
|
||
|
Как просуммировать часы?
|
|||
|---|---|---|---|
|
#18+
Если Время_работы - краткий формат времени не превышает 24 часов, то можно воспользоваться функцией CDbl SELECT T1.Организация, Sum(CDbl(T1.время_работы)) AS [Sum-время_работы] FROM T1 GROUP BY T1.Организация В противном случае - несколько сложнее, надо будет переводитьвремя в фомат даты, те день, как целое число и опять же CDbl на оставшуюся часть. Но это не все, для того чтобы теперь показать Sum-время_работы, например в формате ччч:мм нужна будет функция переводящая Double в стринг ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2004, 15:38:15 |
|
||
|
Как просуммировать часы?
|
|||
|---|---|---|---|
|
#18+
Складывать значения формата "Краткий формат времени" всё равно, что складывать даты: (22-ноя-2004) + (23-ноя-2004). Продолжительность каких-то событий необходимо хранить в единицах (часах, минутах, ..), т.е. в числовом формате. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2004, 15:47:40 |
|
||
|
Как просуммировать часы?
|
|||
|---|---|---|---|
|
#18+
Функцию написать - можно конечно, вот только как обратиться к этой функции в запросе??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2004, 15:48:18 |
|
||
|
Как просуммировать часы?
|
|||
|---|---|---|---|
|
#18+
А зачем бы ее тогда писать, если бы к ней нельзя было обратиться? :-) Точно также, как ко встроенным функциям - имя, аргументы, если есть. -- Regards Alexander Artamonov Posted via ActualForum NNTP Server 1.1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2004, 15:54:19 |
|
||
|
Как просуммировать часы?
|
|||
|---|---|---|---|
|
#18+
Mari.PФункцию написать - можно конечно, вот только как обратиться к этой функции в запросе??? А чего сложного? Допустим, ф-ия такая: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. Твой запрос сохраняем, например в ААА и тогда Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2004, 15:56:02 |
|
||
|
Как просуммировать часы?
|
|||
|---|---|---|---|
|
#18+
FinansСкладывать значения формата "Краткий формат времени" всё равно, что складывать даты: (22-ноя-2004) + (23-ноя-2004). Продолжительность каких-то событий необходимо хранить в единицах (часах, минутах, ..), т.е. в числовом формате. Формат даты на самом деле и есть числовой формат (Double ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2004, 15:58:46 |
|
||
|
Как просуммировать часы?
|
|||
|---|---|---|---|
|
#18+
Спасибо за помощь, но если время больше 24 часов то запрос вернет ерунду? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2004, 16:01:13 |
|
||
|
Как просуммировать часы?
|
|||
|---|---|---|---|
|
#18+
Mari.PСпасибо за помощь, но если время больше 24 часов то запрос вернет ерунду? Ну почему же ерунду? Он вернет: смешанное число, целая часть которого - количество дней, тк при умножении не 24 - кол-во часов, а дробная часть - это части дня: 1 сек = 1/24/60/60. Отсюда и пляшем! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2004, 16:17:44 |
|
||
|
Как просуммировать часы?
|
|||
|---|---|---|---|
|
#18+
Спасибо щас применим на практике ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2004, 16:41:16 |
|
||
|
Как просуммировать часы?
|
|||
|---|---|---|---|
|
#18+
так не получится? SELECT T1.Организация, Sum(CDate(T1.время_работы)) AS [Sum-время_работы] FROM T1 GROUP BY T1.Организация ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2004, 16:53:35 |
|
||
|
Как просуммировать часы?
|
|||
|---|---|---|---|
|
#18+
АлексейКтак не получится? 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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2004, 17:04:02 |
|
||
|
Как просуммировать часы?
|
|||
|---|---|---|---|
|
#18+
а так? Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2004, 17:10:10 |
|
||
|
Как просуммировать часы?
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2004, 17:13:23 |
|
||
|
Как просуммировать часы?
|
|||
|---|---|---|---|
|
#18+
АлексейК Код: plaintext 1. Но часы нужны не от 0 а только остаток, а тогда сложно выходит ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2004, 17:18:42 |
|
||
|
Как просуммировать часы?
|
|||
|---|---|---|---|
|
#18+
Примерно так: 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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2004, 17:23:01 |
|
||
|
Как просуммировать часы?
|
|||
|---|---|---|---|
|
#18+
Че вы тут обсуждаете не пойму. Девушка имхо просто неверный тип данных для поля выбрала. Поле Время_работы должно быть карренси. И все. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2004, 08:37:41 |
|
||
|
Как просуммировать часы?
|
|||
|---|---|---|---|
|
#18+
Шарк, а почему именно карренси - а не дабл или сингл? -- Regards Alexander Artamonov Posted via ActualForum NNTP Server 1.1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2004, 10:31:20 |
|
||
|
Как просуммировать часы?
|
|||
|---|---|---|---|
|
#18+
У карренси целочисленная арифметика. Там 2+2 всегда 4. А с этими мантиссами я наелся, спасибо. Всякие (2+2>4-e) and (2+2<4+e) НИКОГДА не надо использовать эту гадость, разве что звезду понадобится в килограммах измерить:-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2004, 13:29:14 |
|
||
|
Как просуммировать часы?
|
|||
|---|---|---|---|
|
#18+
Shark Можно по-подробнее? Какая разница между Date, Currency и Double в этом случае? Если хранить время (чч:мм) в Currency или в каком другом числовом типе (кроме целочисленного), то число в любом случае будет дробным. Так при чем здесь рассуждения про 2+2 = 4? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2004, 13:59:41 |
|
||
|
Как просуммировать часы?
|
|||
|---|---|---|---|
|
#18+
>Можно поподробнее Можно. Девушке не надо хранить время. И формат ДатаВремя тут не причем, он не предназначен для хранения промежутков времени, он предназначен для записи конкретного времени и даты. Нужно записать просто дробное число(количество человекочасов или человеколет). А для записи дробных чисел правильнее использовать карренси, а не дабл, потому что дважды два :^) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2004, 14:36:56 |
|
||
|
Как просуммировать часы?
|
|||
|---|---|---|---|
|
#18+
Думаю, что все это - дело вкуса! Действительно, нет подходящего формата для хранения промежутков времени. Если они (промежутки) гарантированно меньше 24 часов, мне больше нравится хранить их как есть в формате времени.Легче при показе в формах и отчетах. При необходимости проведения над ними арифметических вычеслений, можно пользоваться почти всеми встроенными функциями времени и даты. Неудобства возникают только при превышении в сумме единицы. Но и эта проблема достаточно легко решается при помощи вышеизложенных вычисений или функций. А при применении типа денег, как то не очень приятно видеть в напрямую открытой таблице символ доллара или фунта или еще какой-нибудь деньги (шекеля к примеру) вместо ожидаемых 00:00 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2004, 15:33:23 |
|
||
|
Как просуммировать часы?
|
|||
|---|---|---|---|
|
#18+
Rivkin Dmitry...А при применении типа денег, как то не очень приятно видеть в напрямую открытой таблице символ доллара или фунта или еще какой-нибудь деньги (шекеля к примеру) вместо ожидаемых 00:00 А не пробовали в денежном типе РУЧКАМИ вбить в формат поля таблицы hh:nn:ss ? Сильно помогает от шекелей. (но мешает вбивать больше 24 часов) (жаль нет смешанных форматов). Единственный сущ-й вопрос - об арифметике в дробной части. Если она "целочисленная" и для поля типа "дата время", для которого известно, что внутреннее представление его - "вещественное число" (формат типа данных не указан) - то нет проблем. Для currency она (арифметика) целочислена по умолчанию. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2004, 19:18:25 |
|
||
|
Как просуммировать часы?
|
|||
|---|---|---|---|
|
#18+
>Думаю, что все это - дело вкуса. ну ну. Первое- действительно, не надо путать тип данных и свойство формат контрола, в котором они показаны. Второе- я устал объяснять про грабли, что 1,25+2,75 будет 3,9999999999 Если Вам это не важно, выбирайте тип в соответствии со своим вкусом :-) Успехов в быстрой разработке отчетов и прямом просмотре таблиц:^) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2004, 07:42:14 |
|
||
|
Как просуммировать часы?
|
|||
|---|---|---|---|
|
#18+
Шарк, логика в применении денежного типа для выражения промежутка времени есть. А вот как наиболее удобным образом его использовать в контексте часов и минут? -- Regards Alexander Artamonov Posted via ActualForum NNTP Server 1.1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2004, 10:43:41 |
|
||
|
|

start [/forum/topic.php?fid=45&msg=32794667&tid=1670081]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
45ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
37ms |
get tp. blocked users: |
1ms |
| others: | 238ms |
| total: | 360ms |

| 0 / 0 |
