powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Моя дипломная головоломка по SQL
6 сообщений из 6, страница 1 из 1
Моя дипломная головоломка по SQL
    #38564106
pasha_amt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подскажите, как написать запрос, чтобы он распределял часы из таблицы "Часы нагрузки на курс. проект" в Таблицу "Часы нагрузки" таким образом, чтобы все часы оказались распределенные в течении месяца, но с ограничением что суммарное количество часов в день в таблице "Часы нагрузки" не должно превышать 8 часов. В качестве примера:

Таблица "Часы нагрузки на курс. проект"
id Часы
1 28

Состояние таблицы "Часы нагрузки" до запроса
id Дата Часы нагурзки
1 01.янв 3
2 02.янв 6
3 03.янв 5
4 04.янв 1
5 05.янв 12
6 06.янв 2
7 07.янв 10
8 08.янв 2
9 09.янв 7
10 10.янв 2

Состояние таблицы "Часы нагрузки" после запроса
id Дата Часы нагурзки
1 01.янв 8
2 02.янв 8
3 03.янв 8
4 04.янв 8
5 05.янв 12
6 06.янв 8
7 07.янв 10
8 08.янв 6
9 09.янв 7
10 10.янв 2
...
Рейтинг: 0 / 0
Моя дипломная головоломка по SQL
    #38564263
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pasha_amtно с ограничением что суммарное количество часов в день в таблице "Часы нагрузки" не должно превышать 8 часов
pasha_amtСостояние таблицы "Часы нагрузки" после запроса
pasha_amt5 05.янв 12
И где тут "не превышать 8 часов"?
...
Рейтинг: 0 / 0
Моя дипломная головоломка по SQL
    #38564346
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pasha_amt , постановка задачи неполна, можно придумать кучу случаев, когда в описании нет ответа. Например, что делать, если всё поднято до 8 часов, а ещё осталось к распределению?
Вообще это не для SQL задача. Но если очень хочется - процедура с курсором...
...
Рейтинг: 0 / 0
Моя дипломная головоломка по SQL
    #38564907
rockclimber
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina pasha_amt , постановка задачи неполна, можно придумать кучу случаев, когда в описании нет ответа. Например, что делать, если всё поднято до 8 часов, а ещё осталось к распределению?
Вообще это не для SQL задача.Хоть и соглашусь с тем, что задача не для SQL, но на диалектах конкретных СУБД она вполне разрешимая, хоть и с изрядной долей изврата. Ну уж в оракле точно.
Кстати, головоломок для SQL можно много разных придумать. Я, например, встречал "задачу Эйнштейна" и генерацию следующего поколения для игры "Жизнь".
...
Рейтинг: 0 / 0
Моя дипломная головоломка по SQL
    #38564928
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну да, медведя можно научить плясать - вот только будет ли с того медведю польза и удовольствие?
...
Рейтинг: 0 / 0
Моя дипломная головоломка по SQL
    #38565386
Фотография iv_an_ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pasha_amtПодскажите, как написать запрос, чтобы он распределял часы из таблицы "Часы нагрузки на курс. проект" в Таблицу "Часы нагрузки" таким образом, чтобы все часы оказались распределенные в течении месяца, но с ограничением что суммарное количество часов в день в таблице "Часы нагрузки" не должно превышать 8 часов.
Примерно так (в предположении, что есть procedure view integer_range, возвращающий целые с ir_first по ir_last включительно как колонку ir_value)

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
create table hours_per_prj (hpp_id integer not null primary key, hpp_hours decimal);
create table available_days (ad_day date not null primary key);
create table hours_of_works (hw_day date not null, hw_prj_id integer not null, hw_hours decimal);

insert into hours_of_works (hw_day, hw_prj_id, hw_hours) select
  coalesce (
    (select top 1 skip day_no ad_day from available_days order by 1 asc),
    signal ('OBLOM', 'Да вы офигели столько работы давать!') ),
  prj_id,
  case -- В этом case с умыслом сделаны две ошибки, чтоб вам было чем заняться
     when (day_no = floor (prj_start / 8)) then 8 - mod (prj_start, 8)
     when (day_no = floor ((prj_start + hpp_hours) / 8)) then mod (prj_start + hpp_hours, 8)
     else 8 end
from
  ( select
      hpp_id as prj_id,
      hpp_hours,
      (select sum (p2.hpp_hours) from hours_per_prj p2 where p2.hpp_id < p1.hpp_id) as prj_start
    from hours_per_prj p1 ) as p,
  integer_range ir
where ir.first = floor (prj_start / 8)
and ir.last = ceiling ((prj_start + hpp_hours - 8) / 8)
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Моя дипломная головоломка по SQL
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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