|
noname
|
|
Подсчет времени03.05.2011, 11:19. Показов 6822. Ответов 31
Метки нет (Все метки)
Добрый день.
Помоги с такой задачкой. Есть 2 таблицы:Квант времени, Работа. Поля в таблице Работа: JOB_ID, begin, duration, status_id Поля в таблице Квант времени: JOB_ID, duration. Суть проблемы: нужно сложить поле Квант времени.duration для которых поле Квант времени.JOB_ID=Работа.JOB_ID при этом если эта сумма равна 0 то нужно найти разницу между Работа.begin и сейчас. Желательно это все реализовать в виде запроса по таблице Работа. Помогите пожалуйста. Заранее спасибо. |
|
| 03.05.2011, 11:19 | |
|
Ответы с готовыми решениями:
31
Подсчет времени Подсчет времени
|
|
3544 / 1118 / 94
Регистрация: 13.03.2011
Сообщений: 1,513
|
|
| 04.05.2011, 08:22 | |
|
Какие типы у полей таблиц и какие значения они содержат?
0
|
|
|
noname
|
|
| 04.05.2011, 09:02 | |
|
Работа.JOB_ID - это счетчик
Работа.status_id - числовой Квант времени.JOB_ID - числовой(ссылка Работа.JOB_ID) begin, duration - тип Дата/Время. с числовыми полями я думаю понятно, в begin - хранится время начала, duration - продолжительность выполнения. |
|
|
3544 / 1118 / 94
Регистрация: 13.03.2011
Сообщений: 1,513
|
|
| 04.05.2011, 11:57 | |
|
0
|
|
|
noname
|
|
| 04.05.2011, 21:34 | |
|
begin дату+время
duration только время |
|
|
118 / 118 / 10
Регистрация: 12.05.2010
Сообщений: 1,207
|
|
| 04.05.2011, 23:04 | |
|
Например, так.
0
|
|
|
3544 / 1118 / 94
Регистрация: 13.03.2011
Сообщений: 1,513
|
||||||
| 04.05.2011, 23:38 | ||||||
|
noname, потестируйте такой запрос
Возможно вам нужно в запросе не Now()-First(R.begin), а наоборот First(R.begin)-Now().
0
|
||||||
|
3544 / 1118 / 94
Регистрация: 13.03.2011
Сообщений: 1,513
|
|
| 04.05.2011, 23:58 | |
|
Вдогонку. Имя таблицы "Квант времени" содержит пробел, который заменен в запросе на знак подчеркивания. Соответственно переименуйте у себя в базе таблицу.
Впредь старайтесь использовать имена таблиц, полей, ... без пробелов, так как пробелы в именах приводят к некоторым осложнениям, в данном случае, при создании запроса.
0
|
|
|
noname
|
||||||
| 05.05.2011, 13:07 | ||||||
|
Здравствуйте.
Не могли бы вы помочь мне и правильно переделать мой запрос
"was_time"-поле в котором вычисляется время уже затраченное на работу, "end"-время которое предполагается еще затратить на выполнения работы "free"-время которое свободно до конца рабочего дня "was_time"-вычисляется путем складывания всех записей поля Квант времени.duration для которых поле Квант времени.JOB_ID=Работа.JOB_ID. Само поле Квант времени.duration-это разница между полями end_time и begin_time. Так же в таблице присутствуют записи с частичными данными (есть поля begin_date, begin_time(которые заполняются когда работа выполняется) и поля end_date, end_time(которые заполняются когда работа приостановлена или окончена)), данные о начале работы заполнены, а о окончании нет, для таких полей нужно рассчитать разницу между Time() и последней записью Квант времени.begin_time "end"-вычисляется путем разницы между Time() и суммой последней записи Квант времени.begin_time и предполагаемым временем окончания (находится путем вычитания из среднего времени выполнения(таблица матрица возможностей и поле averagetime), время которое уже было затрачено на работу) "free"-находится путем вычисления разницы между "end" и 17:00 вечера Прилогаю пример данной базы. Просто очень важно и главное срочно решить эту проблему. Надеюсь на понимание и содействие. Заранее спасибо. |
||||||
|
3544 / 1118 / 94
Регистрация: 13.03.2011
Сообщений: 1,513
|
|||||
| 05.05.2011, 20:24 | |||||
Почему в разности не учитывается begin_date и end_date? Они что всегда равны? Если да, то зачем держать в таблице обе даты, ведь достаточно одной?
Под последней записью понимается запись с максимальным значением begin_time? Т.е. схематично end=Time()-(Max(begin_time)+(averagetime-was_time))?
А free_time, присутствующее в запросе, считать не надо? В запросе используется текущее время, так на какой момент времени у вас представлены ожидаемые результаты расчета? Могут какие-нибудь результаты расчета, особенно подозрительно free, становиться отрицательными? Могут какие-нибудь результаты расчета быть больше 24 часов? Ведь тогда прийдется задействовать дни.
0
|
|||||
|
noname
|
||||||||
| 05.05.2011, 21:05 | ||||||||
|
Поля begin_date и end_date в теории всегда должны быть одинаковыми но в реали они редко(но бывает) различаются В данном запросе участвуют работы которые имеют статус только 2 или 4 нахождения разницы между "end" и 17:00 вечера. Если разница отрицательна то нужно показывать превательно умножив на (-1), если число положительное то нужно показывать "00:00:00" |
||||||||
|
3544 / 1118 / 94
Регистрация: 13.03.2011
Сообщений: 1,513
|
|||||||||
| 05.05.2011, 22:50 | |||||||||
0
|
|||||||||
|
3544 / 1118 / 94
Регистрация: 13.03.2011
Сообщений: 1,513
|
||
| 06.05.2011, 10:29 | ||
Зачем у вас в таблице "Квант времени" разделены дата и время: begin_date, begin_time и end_date, end_time? Повторно задаю вопрос зачем держать в таблицах "Работа" и "Квант времени" поля duration, которые являются вычисляемыми, т.е. рассчитываются на основании значений других полей? В нормализованных базах (почитайте на досуге о нормализации БД) не допускается размещения в таблицах полей, значения которых свободно могут быть вычислены в запросах. Обозначим через T "момент запуска запроса пользователем", содержащим сведения о дата+время. Предположим, что вместо двух полей begin_date, begin_time имеем одно, объединяющее их поле begin_dt, и соответственно вместо end_date, end_time - end_dt. Для ясности будем вести все рассуждения для одного JOB_ID, имеющего статус равный 2 или 4. Разберемся сначала с вычислением was_time. Правильно ли я понимаю, что статус равный 2 или 4 гарантирует наличие в таблице "Квант времени" единственной записи с пустым значением поля end_dt, при этом значение поля begin_dt этой записи является максимальным из всех begin_dt записей рассматриваемого JOB_ID? Верно ли утверждение, что T всегда больше или равно Max(beg_dt)? Если нет, то как вести расчет?
0
|
||
|
noname
|
|||
| 06.05.2011, 22:28 | |||
|
Поле duration в таблице "Работа" необходимо по условию данной задачи, в таблице "Квант времени"-было сделано тоже для облегчения вычисления в запросах. На счет Т:если знаечение Т будет всегда состоять из связки даты и времени то ваше утверждение верно. |
|||
|
3544 / 1118 / 94
Регистрация: 13.03.2011
Сообщений: 1,513
|
|||
| 06.05.2011, 23:48 | |||
0
|
|||
|
3544 / 1118 / 94
Регистрация: 13.03.2011
Сообщений: 1,513
|
||
| 07.05.2011, 09:52 | ||
|
Еще один довод в пользу отказа от полей duration.
Так по своему смыслу эти поля являются промежутками времени, то пока промежутки меньше 24 часов их еще можно втиснуть в поля типа Дата/Время, хотя данный тип предусматривает хранение МОМЕНТА времени, а если промежуток будет превышать 24 часа, то его храненине нужно организовывать по другому. С этим вопросом мы сейчас и столкнемся на примере поля averagetime таблицы "Матрица возможности" (кстати, вы так и не вняли моему совету о вредности пробелов в именах таблиц, полей ...). Значение averagetime можно хранить: - в текстовом поле в виде "дд чч:мм:cc", т.е. дни часы:минуты:секунды. Для ввода использовать маску ввода; - в двух полях: одно целого типа для дней, второе типа Дата/Время для времени; - ваши предложения. Какой вариант на ваш взгляд предпочтительней? Теперь поговорим о вычислении end в запросе. По вашему алгоритму
end=T-(Max(beg_dt)+(averagetime-was_time)) или если раскрыть скобки и сгруппировать по другому, то получим end=(T-Max(begin_dt))-(averagetime-was_time) Глядя на эту формулу, закрадываются некоторые сомнения, может быть потому, что я чего-то не знаю и недопонимаю: - если нужно определить end, начиная с момента Т, то должно, по идее, быть end=averagetime-was_time; - если же точкой отсчета для определения end является Max(begin_dt), то end=averagetime-(was_time-(T-Max(begin_dt))) или после преобразований end=(T-Max(begin_dt))+(averagetime-was_time). Подумайте над этим и тем, что если с работой затянули, то end может быть отрицательным. Что выводить в этом случае?
0
|
||
|
noname
|
|||
| 07.05.2011, 13:41 | |||
|
enв должен считаться так: end=(Работа.begin+averagetime)-was_time. На счет того что если end отрицательный: если работа затянится то будет даже лучше если будет показываться время со знаком "-". |
|||
|
noname
|
||
| 07.05.2011, 13:46 | ||
|
|
||
| 07.05.2011, 13:46 | |
|
Помогаю со студенческими работами здесь
20
Подсчет прошедшего календарного времени и выведение нескольких таблиц в одну форму
Подсчет времени подсчет времени Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога
Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
|
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога
Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
|
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога
Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
|
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
|
|
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога
В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
|
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
|
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога
Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
|
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
|