|
|
|
Поиск даты окончания периода
|
|||
|---|---|---|---|
|
#18+
Добрый день, нужна помощь с реализацией алгоритма для решения такой задачи. На вход поступает дата начала периода и количество дней в периоде. Нужно найти дату окончания периода без учета праздничных дней. Список дат праздников имеется. В лоб решается так: 1.Вычисляем дату окончания 2.Проверяем, сколько праздничных дней между датой начала и окончания 3.Запоминаем дату окончания, сдвигаем дату окончания на количество праздников. 4.Ищем праздники между запомненной и новой датой окончания и продолжаем пока будут находиться праздники. Мне этот вариант не нравится. Помогите ,пожалуйста, найти более умное решение, может вообще без цикла. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.12.2013, 17:19 |
|
||
|
Поиск даты окончания периода
|
|||
|---|---|---|---|
|
#18+
Идём по списку праздников, упорядоченному по возрастанию дат, по дороге накапливаем рабочие дни из промежутков, пока не наберется сколько нужно, например. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.12.2013, 17:24 |
|
||
|
Поиск даты окончания периода
|
|||
|---|---|---|---|
|
#18+
javapecker , обозначьте среду реализации. И структуру хранения исходных данных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.12.2013, 18:28 |
|
||
|
Поиск даты окончания периода
|
|||
|---|---|---|---|
|
#18+
Akina, даты праздников хранятся в реляционной базе в таблице с одним полем типа дата. Среда реализации - любая, где не используются функциональные языки. Псевдокод устроит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.12.2013, 18:45 |
|
||
|
Поиск даты окончания периода
|
|||
|---|---|---|---|
|
#18+
Akina, если можно это сделать SQL запросом без привязки к возможностям конкретной СУБД, тоже подойдет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.12.2013, 18:50 |
|
||
|
Поиск даты окончания периода
|
|||
|---|---|---|---|
|
#18+
javapecker, наверно таки sql-ем нужно, иначе просто итерация с проверкой - праздник или входной А sql-ем, чтобы проще: пусть период равен N и стартовая дата D_start - все выходные и праздники в году (в годах, куда период должен заведомо уложится) заранее задаются в таблице T_Нерабочиедни (или во вью из таблиц за каждый год) - создаем таблицу T_Вседни с D_start до заведомого конца (пусть на несколько лет вперед, ибо так или иначе нужно знать нерабочие и их задавать до заведомого конца) тогда наш период Код: sql 1. 2. 3. 4. 5. 6. 7. 8. сюда и попадает случай, когда D_start задан нерабочим дне ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.12.2013, 19:04 |
|
||
|
Поиск даты окончания периода
|
|||
|---|---|---|---|
|
#18+
Думаю, можно обойтись и без дополнительных таблиц. Итак, у нас есть дата начала периода, количество дней и таблица выходных/праздничных дней. Для каждого выходного посчитаем следующее: дата выходного минус дата начала минус количество выходных в этом периоде. Возьмём запись с минимальным положительным. Отнимем его от даты выходного. Вот и дата конца периода. Потребуется три (или две? лень превращать это в текст запроса) копии исходной таблицы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.12.2013, 21:08 |
|
||
|
Поиск даты окончания периода
|
|||
|---|---|---|---|
|
#18+
Странно, что учитываются только праздники, без выходных дней. Рабочий календарь-бы помог. В реальности на него и опираются подобные задачи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2013, 09:15 |
|
||
|
Поиск даты окончания периода
|
|||
|---|---|---|---|
|
#18+
wadmanСтранно, что учитываются только праздники, без выходных дней. Рабочий календарь-бы помог. В реальности на него и опираются подобные задачи. так - расчет зарплат, табельный учет, производственное планирование, ... в КАЖДОМ ГОДУ на каждом предприятии СВОИ (не только общегосударственные, а также общегосударственные могут быть вполне рабочими у кого-то) нерабочие дни И что - может быть какое-то предприятие ЖКХ, которое только по праздникам не работает. Ну и периоды дежурств там сантехников или электриков. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2013, 09:36 |
|
||
|
Поиск даты окончания периода
|
|||
|---|---|---|---|
|
#18+
AlexandrPluswadmanСтранно, что учитываются только праздники, без выходных дней. Рабочий календарь-бы помог. В реальности на него и опираются подобные задачи. так - расчет зарплат, табельный учет, производственное планирование, ... в КАЖДОМ ГОДУ на каждом предприятии СВОИ (не только общегосударственные, а также общегосударственные могут быть вполне рабочими у кого-то) нерабочие дни И что - может быть какое-то предприятие ЖКХ, которое только по праздникам не работает. Ну и периоды дежурств там сантехников или электриков. Ни одного вопроса, одни утверждения. Это что, отрицание или подтверждение правоты моего сообщения? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2013, 09:43 |
|
||
|
Поиск даты окончания периода
|
|||
|---|---|---|---|
|
#18+
wadmanAlexandrPlusпропущено... так - расчет зарплат, табельный учет, производственное планирование, ... в КАЖДОМ ГОДУ на каждом предприятии СВОИ (не только общегосударственные, а также общегосударственные могут быть вполне рабочими у кого-то) нерабочие дни И что - может быть какое-то предприятие ЖКХ, которое только по праздникам не работает. Ну и периоды дежурств там сантехников или электриков. Ни одного вопроса, одни утверждения. Это что, отрицание или подтверждение правоты моего сообщения? это - треп 8) мало ли что бывает в 1С-ах, Парусах, ... так и делается в разных модулях учета рабочего времени, причем не только у предприятия свои нерабочие дни, но и у каждого работника ЗЫ К тому, если назначать какие-то периоды каких-то дежурств. 8) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2013, 09:56 |
|
||
|
Поиск даты окончания периода
|
|||
|---|---|---|---|
|
#18+
AlexandrPlus,wadman, вас унесло слегка в сторону). Мне прекрасно известно, как это делается в "реальности". Но условие остается прежним, хранятся только даты праздников, выходные мне не нужны. Поэтому мне не нужно хранить все дни года в таблице. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2013, 11:52 |
|
||
|
Поиск даты окончания периода
|
|||
|---|---|---|---|
|
#18+
javapeckerНо условие остается прежним, хранятся только даты праздников, выходные мне не нужны. Тогда только с циклом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2013, 12:15 |
|
||
|
Поиск даты окончания периода
|
|||
|---|---|---|---|
|
#18+
javapeckerAlexandrPlus,wadman, вас унесло слегка в сторону). Мне прекрасно известно, как это делается в "реальности". Но условие остается прежним, хранятся только даты праздников, выходные мне не нужны. Поэтому мне не нужно хранить все дни года в таблице. Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Ну вот, если нигде не ошибся то должно определять правильно... таблица состоит из единственного столбца `date` - дата праздника (тип DATE). Запрос не оптимизировал, так что не знаю, возможно и можно улучшить и ускорить. Особенность: если указанный период заканчивается за пределами последнего праздника, то будет возвращён пустой результат ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2013, 13:39 |
|
||
|
|

start [/forum/topic.php?fid=16&msg=38510904&tid=1341531]: |
0ms |
get settings: |
9ms |
get forum list: |
20ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
187ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
65ms |
get tp. blocked users: |
2ms |
| others: | 251ms |
| total: | 555ms |

| 0 / 0 |
