|
|
|
Подсчет стоимости проживания за период
|
|||
|---|---|---|---|
|
#18+
Здравствуйте, господа. Имеется задача: рассчитать стоимость проживания в номере за период времени, то есть от даты заезда до даты выезда. Имеется таблица с ценами на этот номер на конкретные периоды времени. Код: sql 1. 2. 3. 4. 5. 6. Задача, в принципе, типовая, но что-то ответа на свой вопрос я не нахожу. Вопрос в следующем: каким запросом можно самым оптимальным способом подсчитать стоимость проживания? Пока, единственное, что я вижу - это сделать выборку, где каждая строка будет соответствовать одному дню проживания, и потом полученные строки сложить. Но может есть другой способ? Не так, чтобы каждая строка результата выглядела как "цена проживания на такую-то дату составила столько-то", а так, чтобы каждая строка была вида "цена за проживание с такого-то по такое-то число составила столько-то". Или это будет гораздо более ресурсоёмко, чем вариант "одна строка на каждое число"? И в варианте "одна строка на каждое число" - обязательно использовать подзапрос, или можно сделать всё как-то более оптимально? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2012, 04:40 |
|
||
|
Подсчет стоимости проживания за период
|
|||
|---|---|---|---|
|
#18+
Для всех периодов проживания находятся пересечения с периодами действия цены и затем по найденным пересечениям вычисляется стоимость. Один джоин по номеру и два кейза - для даты начала пересечения и даты окончания пересечения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2012, 10:23 |
|
||
|
Подсчет стоимости проживания за период
|
|||
|---|---|---|---|
|
#18+
Программист-Любитель, А пример можно в студию? )) А то я что-то не соображу, как это сделать. В таблице цен указаны не периоды полностью, а только даты начала периодов. Пока я решаю это так: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. Где _dateStart, _dateEnd, _roomId - параметры, передаваемые в хранимую процедуру. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2012, 18:03 |
|
||
|
Подсчет стоимости проживания за период
|
|||
|---|---|---|---|
|
#18+
Цена у вас за день, верно? Тогда вам нужны две функции (или подзапроса) Дата конца периода неизменной цены (d_start позже этой даты, _dateEnd если раньше этой даты смены цены не было) цена на определенную дату(dprice) Количество строк в запросе будет равно числу смен цены между _dateStart и _dateEnd плюс одна строка. Для простоты заменим start_month и start_day на d_change Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. подзапросы/функции сделайте самостоятельно (с этим у вас проблем не вижу) теоретически можно совместить оба подзапроса для оптимизации но тогда теряется ясность и простота ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2012, 03:42 |
|
||
|
Подсчет стоимости проживания за период
|
|||
|---|---|---|---|
|
#18+
Нарисуйте на бумажке два наезжающих друг на друга прямоугольника - период 1 и период 2 Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2012, 08:44 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=37710405&tid=1541786]: |
0ms |
get settings: |
8ms |
get forum list: |
14ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
76ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
43ms |
get tp. blocked users: |
1ms |
| others: | 237ms |
| total: | 394ms |

| 0 / 0 |
