SQLRU.net
Разработка приложений баз данных

Начало » Использование СУБД » Microsoft SQL Server » Поиск по диапазону значений
Поиск по диапазону значений [сообщение #3248] Thu, 05 October 2023 00:22 Переход к предыдущему сообщению
Stephov в настоящее время не в онлайне  Stephov
Сообщений: 3
Зарегистрирован: October 2023
Junior Member
Всем привет.
Гостиница предоставляет данные о своих номерах, в виде кодов, например: 0103031206100002.
Первые 2 символа - это количество мест для взрослых (01), следующие 2 символа - места для детей (03). Затем идет описание диапазона возрастов для каждого из детей. Разделим оставшиеся символы по 4: 0312, 0610, 0002. Получается 1 ребенок в возрасте от 3 до 12 лет, один 6-10 лет и один 0-2 лет.

Было решено создать 2 таблицы. Первая хранит детальные данные о комнате:
Room
Id   Code                             Type   ChildCount     Price и тд.
1    0103031206100002       Type1  3                  125

А вторая - это описание диапазонов возрастов детей, на основании кода. Получается как-то так:
ChildAccomodation
Id      Code                             ChMinAge     ChMaxAge
1       0103031206100002        3                 12
2       0103031206100002        6                 10
3       0103031206100002        0                 2

При поиске комнаты, нам передается количество и возрасты детей. Например 3 ребенка, в возрасте: 5,7 и 2 года. Надо отметить, что детей может быть от 1 до 5. В результате надо показать строку из таблицы Room: комнату, где можно разместить всех детей.

Требования такие: если хоть один из возрастов не входит в диапазон (например, есть один ребенок 13 лет), то результат запроса должен быть пустым.
Если указано 2 ребенка в возрасте 1 года, то результат опять должен быть пустым, поскольку в комнате предусмотрено только одно место для диапазона 0-2.
Для ребенка 7 лет подходит как диапазон 3-12, так и 6-10. Но тут загвоздка в том, что если для 7-летнего найти строку с диапазоном 3-12, то 5-летний останется за бортом: ни 0-2, ни 6-10 ему уже не подойдут. Для 7-летнего нужно найти диапазон 6-10, чтобы 5-летнему подошел диапазон 3-12, а 2-летнему 0-2, в этом случае все дети разметятся.

Ломаю голову уже 2 дня.. может кто сталкивался с подобной задачей?
Заранее спасибо.
 
Сообщение не прочитано
Сообщение не прочитано
Сообщение не прочитано
Сообщение не прочитано
Предыдущая тема: join
Следующая тема: Join по последней дате
Переход к форуму:
  


Текущее время: Thu May 16 21:14:37 GMT+3 2024

Общее время, затраченное на создание страницы: 0.00621 секунд