|
|
|
Как просуммировать часы?
|
|||
|---|---|---|---|
|
#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 |
|
||
|
Как просуммировать часы?
|
|||
|---|---|---|---|
|
#18+
>А вот как наиболее удобным образом его использовать в контексте часов и минут? Ну например так Function ФорматПромежуткаВремениДляКарренси(p1 As Currency) As String Dim i1 As Long i1 = Int(p1) ФорматПромежуткаВремениДляКарренси = _ Format(i1) & " ч. " & Format((p1 - i1) * 60) & " мин." End Function >Шарк, логика в применении денежного типа для выражения промежутка времени есть. Извините за занудство:^) не только для промежутков, но и для практически любых дробных чисел ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2004, 08:17:08 |
|
||
|
Как просуммировать часы?
|
|||
|---|---|---|---|
|
#18+
Shark>1,25+2,75 будет 3,9999999999 А у денежнего формата нет таких "фишек"? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2004, 09:55:20 |
|
||
|
Как просуммировать часы?
|
|||
|---|---|---|---|
|
#18+
Денежный формат это целое число, деленное на десять тыщ, так что там все пучком. A double это мантисса и еще чето не помню названия:^), и ессно арифметика там приблизительная. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2004, 10:16:43 |
|
||
|
Как просуммировать часы?
|
|||
|---|---|---|---|
|
#18+
Wow! А я, по-наивности, все денежные суммы в доубл зарядил :( Так; а если идет умножение доубл-числа на деньги результат как будет округляться? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2004, 10:22:04 |
|
||
|
Как просуммировать часы?
|
|||
|---|---|---|---|
|
#18+
Function fn2() Dim a1 As Double Dim a2 As Currency a1 = 1 a2 = 1 Debug.Print TypeName(a1 * a2) End Function Double ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2004, 10:56:35 |
|
||
|
Как просуммировать часы?
|
|||
|---|---|---|---|
|
#18+
Аналогично, прошу прощения за занудство. Ну, функция перевода денег во время это понятно. Правда, ИМХО, Format() здесь лишнее - тем паче с одним аргументом. Амперсанд и так неявно преобразовывает в строку. К тому же минуты неплохо бы до целых округлить, типа, i1 & " ч. " & CInt((p1 - i1) * 60) & " мин." Но это все детали. А вот что дальше делать? Ну получим мы вычисляемое поле. Стало быть ввести в него данные нельзя - можно только посмотреть, чему соответстует 6,89. А если нужно ввести 6 ч. 53 мин.? Делать свободное поле для ввода строки, через другую функцию преобразовывать ее в карренси и по некоему событию вносим полученное значение в таблицу? Или как? -- Regards Alexander Artamonov Posted via ActualForum NNTP Server 1.1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2004, 12:19:10 |
|
||
|
Как просуммировать часы?
|
|||
|---|---|---|---|
|
#18+
>А если нужно ввести 6 ч. 53 мин.? 1) Для меня очевидно, что ни тип, ни формат времени для промежутка времени не подходят категорически. Как реализовать любую требуемую функциональность Вы похоже не хуже меня понимаете. 2) Усердие все превозмогает. Иногда усердие превозмогает и рассудок. (с) К.Прутков :^) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2004, 12:34:10 |
|
||
|
Как просуммировать часы?
|
|||
|---|---|---|---|
|
#18+
А если нужно вввести 1 месяц 3 недели и 2 дня? Ну нет такого стандартного формата, ручками надо делать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2004, 12:40:03 |
|
||
|
Как просуммировать часы?
|
|||
|---|---|---|---|
|
#18+
Все-таки время мыслится в часах и минутах, а не в десятичных дробях. И оператор при вводе не должен переводить вручную 6 ч 05 мин в карренси. Я просто думал, у Вас есть опробованный алгоритм по данному вопросу. Буде необходимость, обязательно изобрету велосипед. :-) -- Regards Alexander Artamonov Posted via ActualForum NNTP Server 1.1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2004, 12:41:22 |
|
||
|
Как просуммировать часы?
|
|||
|---|---|---|---|
|
#18+
Нет, алгоритма у меня нет. Я думаю, что поле для ввода строки должно быть не свободным, а связанным, те надо добавить строковое поле в табличку. И если не удалось преобразовать его своим кодом в карренси, то ругаться. А если удалось, то преобразовывать карренси самому обратно и переписывать это поле. Тогда кажется будет работать как будто это стандартный формат. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2004, 12:50:30 |
|
||
|
Как просуммировать часы?
|
|||
|---|---|---|---|
|
#18+
SharkНет, алгоритма у меня нет. Я думаю, что поле для ввода строки должно быть не свободным, а связанным, те надо добавить строковое поле в табличку. И если не удалось преобразовать его своим кодом в карренси, то ругаться. А если удалось, то преобразовывать карренси самому обратно и переписывать это поле. Тогда кажется будет работать как будто это стандартный формат. Нет сомнений - логика в рассуждениях Shark есть! С подобными преобразованиями я столкнулся при использовании географических координат. Поскольку такого типа не существует и, более того, его передают в разных форматах (в градусах и частях градусов, в градусах, минутах и частях минуты, в радусах, минутах, секундах и частях секунды, широта и долгота может присутствовать в буквах или выражаться положительным или отрицательным числом; кроме того широты, как известно изеряются до 90 град., а долготы до 180) то нет другого выхода, как хранить каждую координату в двух полях - численном (для поиска на картах) и стринговом (для показа и ввода на экране). Головной боли - более чем предостаточно! необходимы функции для взаимного перевода форматов - из числового в стринговый и наоборот, не простой функции, проверяющей корректность введенной координаты и проч. Слава богу, что еще не приходится производить суммирования по координатам! Но приходится вычислять расстояния - и это тоже становится не очень просто. Это все я привел для примера к тому, что предлагает Shark при работе с денежным форматом в применении к промежуткам времени. Я убежден, что в большинстве случаев (те когда промежутки времени не превышают 24 часа) все-же удобнее хранить их (промежутки времени) в формате даты. нет головной боли при вводе-выводе, а при арифметических действиях над ними необходимы просетйшие функции пеобразования в необходимый стринговый формат - и все! В общем-то и в случае промежутков времени больших чем 24 часа рассуждения - те же. Не должно быть проблем. А что касается точности вычислений, то их тоже можно регулировать не сложным образом, например, добавлением 0.5 секунды для вычислений с точностью до секунды. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2004, 10:16:30 |
|
||
|
|

start [/forum/topic.php?all=1&fid=45&tid=1670081]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
51ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
41ms |
get tp. blocked users: |
1ms |
| others: | 291ms |
| total: | 422ms |

| 0 / 0 |
