|
|
|
пересечение диапазонов дат
|
|||
|---|---|---|---|
|
#18+
Два диапазона дат, надо составить выражение возвращающее true если существует хотя бы один день, общий для этих диапазонов и false если такого дня не существует. Ну и желательно чтобы выражение было попроще. Казалось бы, вопрос простой, но я сидел, пыхтел, наконец залез в Гугл, и нашел только одно(!) описание решения. Копирую сюда, "чтоб было". ссылка Проверка пересечения диапазонов датСегодня на работе возник вопрос, как наиболее посто проверить, пересекаются ли два диапазона дат. Моя жена (по образованию математик, работает вместе со мной программистом) сходу выдала очень простой способ. [BeginDate1 - EndDate1] - первый диапазон [BeginDate2 - EndDate2] - второй диапазон Диапазоны не пересекаются, если BeginDate2 > EndDate1 или EndDate2 < BeginDate1. Используйте отрицание и получите условие пересечения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2007, 19:16 |
|
||
|
пересечение диапазонов дат
|
|||
|---|---|---|---|
|
#18+
S.G.Два диапазона дат, надо составить выражение возвращающее true если существует хотя бы один день, общий для этих диапазонов и false если такого дня не существует. Ну и желательно чтобы выражение было попроще. Казалось бы, вопрос простой, но я сидел, пыхтел, наконец залез в Гугл, и нашел только одно(!) описание решения. Рассказываю алгоритм. 1) Берем лист бумаги 2) Рисуем на листке бумаги прямую линию со стрелочкой на конце. 3) Под стрелочкой, чуть ниже, рисуем T(сек.). 4) Произвольным образом отмечаем на прямой 4 точки. 5) В произвольном порядке подписываем эти точки : BeginDate1, BeginDate2, EndDate1, EndDate2 6) Смотрим 7) Думаем. 8) Пишем решение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2007, 19:34 |
|
||
|
пересечение диапазонов дат
|
|||
|---|---|---|---|
|
#18+
Раз пять приходилось решать задачу. Всегда решал таким способом: Код: plaintext 1. 2. Если BeginDate2 >= BeginDate1, то Код: plaintext 1. Это и есть условие пересечения диапазонов. Другими словами Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2007, 19:38 |
|
||
|
пересечение диапазонов дат
|
|||
|---|---|---|---|
|
#18+
дааа.... математики.... BeginDate1 <= EndDate2 AND BeginDate2 <= EndDate1 Вы б еще циклами начали это решать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2007, 23:07 |
|
||
|
пересечение диапазонов дат
|
|||
|---|---|---|---|
|
#18+
Бывает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2007, 23:19 |
|
||
|
пересечение диапазонов дат
|
|||
|---|---|---|---|
|
#18+
S.G. wrote: > Два диапазона дат, надо составить выражение В чем проблема-то? Диапазоны пересекаются, если конец первого диапазона назодится позже начала второго. и Начало первого диапазона находится раньше начала второго. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2007, 05:20 |
|
||
|
пересечение диапазонов дат
|
|||
|---|---|---|---|
|
#18+
Общий алгоритм для нахождения факта пересечения любых отрезков, лежащих на одной линии Имеются отрезки (Line1_X1, Line1_X2) (Line2_X1, Line2_X2) Тест Min(Max(Line1_X1, Line1_X2), Max(Line2_X1, Line2_X2)) >= Max(Min(Line1_X1, Line1_X2), Min(Line2_X1, Line2_X2)) Если результат положительный, то отрезки имеют хотя бы одну общую точку. Смысл алгоритма: найти общий отрезок, принадлежащий двум заданным отрезкам (что-то типа того) Verba volent, scripta manent ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2007, 11:33 |
|
||
|
пересечение диапазонов дат
|
|||
|---|---|---|---|
|
#18+
Ух ты, тут даже обсуждение пошло Да никто и не говорил что задача- супер- пупер. Можно решить по разному. Но, желательно, чтобы решение было попроще , на пальцах, чтобы сразу видно было, что оно правильное. Потому и запостил сюда, потому что понравилось. Nikolay B. Рассказываю алгоритм. 1) Берем лист бумаги 2) Рисуем на листке бумаги прямую линию со стрелочкой на конце. 3) Под стрелочкой, чуть ниже, рисуем T(сек.). 4) Произвольным образом отмечаем на прямой 4 точки. 5) В произвольном порядке подписываем эти точки : BeginDate1, BeginDate2, EndDate1, EndDate2 6) Смотрим 7) Думаем. 8) Пишем решение.Николай, сходите сюда и скажите, под какое именно из определений алгоритма попадает ваш. Где в определениях алгоритма написано "смотрим", "думаем", и т.д. А насчет произвольного порядка- вы предлагаете решать задачу методом Монте- Карло? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2007, 22:55 |
|
||
|
пересечение диапазонов дат
|
|||
|---|---|---|---|
|
#18+
White Owl, ErV - спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2007, 23:01 |
|
||
|
пересечение диапазонов дат
|
|||
|---|---|---|---|
|
#18+
S.G.Николай, сходите сюда и скажите, под какое именно из определений алгоритма попадает ваш. Спасибо, не пойду. Верю, что под определение не попадет. Однако сути это не меняет. S.G. А насчет произвольного порядка- вы предлагаете решать задачу методом Монте- Карло? Ответ : нет. Встречный вопрос : Вы предлагаете считать, что на сравнение диапазоны нам приходят исключительно в виде BeginDate1<=EndDate1 и BeginDate2<=EndDate2 ? Дополнительный вопрос : А почему ж Вы тогда не считает, что и BeginDate1<=EndDate2 ? Тогда вообще все решается одним сравнением. Какое элегантное решение! Ну просто - Ох! Какое удовольствие решать задачу для идеальных условий! НЛ, как говориться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2007, 10:19 |
|
||
|
пересечение диапазонов дат
|
|||
|---|---|---|---|
|
#18+
S.G.White Owl, ErV - спасибо. хм... а если один диапазон является частью другого диапазона, то это разве не является пересечением? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2007, 10:23 |
|
||
|
пересечение диапазонов дат
|
|||
|---|---|---|---|
|
#18+
Nikolay B.Ох! Какое удовольствие решать задачу для идеальных условий! +1 Золотые слова :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2007, 10:25 |
|
||
|
пересечение диапазонов дат
|
|||
|---|---|---|---|
|
#18+
Dan Blackхм... а если один диапазон является частью другого диапазона, то это разве не является пересечением?Является. Что тебя смущает? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2007, 18:18 |
|
||
|
пересечение диапазонов дат
|
|||
|---|---|---|---|
|
#18+
White Owl Dan Blackхм... а если один диапазон является частью другого диапазона, то это разве не является пересечением?Является. Что тебя смущает? Уже ничего :-) ляпнул, не подумавши ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2007, 18:43 |
|
||
|
пересечение диапазонов дат
|
|||
|---|---|---|---|
|
#18+
А как быть если число отрезков может быть более 2х и в каждом случае различно, как быть? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2014, 17:30 |
|
||
|
пересечение диапазонов дат
|
|||
|---|---|---|---|
|
#18+
feniks , тогда - по индукции Ищем пересечение первых двух, затем пересечение ПЕРЕСЕЧЕНИЯ с третьим и т.д. Выход - либо при отсутствии пересечения на каком-то этапе, либо когда отрезки закончатся. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2014, 18:12 |
|
||
|
пересечение диапазонов дат
|
|||
|---|---|---|---|
|
#18+
Я когда-то решил эту задачу для бесконечных диапазонов слева или справа. И для вариантов разных сочетаний конечных и бесконечных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2014, 18:15 |
|
||
|
пересечение диапазонов дат
|
|||
|---|---|---|---|
|
#18+
feniksА как быть если число отрезков может быть более 2х и в каждом случае различно, как быть?надо начать с постановки своей задачи. результат будет true когда: - все пары диапазонов (отрезков?) имеют пересечение в одной и той же дате, или - каждая пара имеет пересечение хотя бы в одной дате, или - хотя бы одна пара имеет пересечение ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2014, 23:30 |
|
||
|
пересечение диапазонов дат
|
|||
|---|---|---|---|
|
#18+
Постановка задачи такая. Запрос возвращает таблицу следующего вида (лицевой более чем в 1-м договоре): Договор Лицевой ДатаНачала ДатаОкончания1 2 01.01.2014 31.01.20142 2 01.02.2014 01.01.20453 3 01.01.2014 31.01.20144 3 01.02.2014 01.01.20455 3 01.03.2014 01.04.2014 Один лицевой встречающийся в 2-х и более договорах, необходимо проверить на пересечение диапазонов дат ДатаНачала и ДатаОкончания. Если есть пересечения, это ошибка. Результат нужен в виде таблицы пересекающихся дат лицевых счетов, для их дальнейшего разбора. Таблица пересечений: Договор Лицевой ДатаНачала ДатаОкончания ПризнакПересечения3 3 01.01.2014 31.01.2014 04 3 01.02.2014 01.01.2045 15 3 01.03.2014 01.04.2014 1 Средства решения задачи: T-SQL. Вот какая вот задача :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2014, 09:28 |
|
||
|
пересечение диапазонов дат
|
|||
|---|---|---|---|
|
#18+
feniksОдин лицевой встречающийся в 2-х и более договорах, необходимо проверить на пересечение диапазонов дат ДатаНачала и ДатаОкончания. Если есть пересечения, это ошибка.Значит, это приблизительно третий случай в моем вопросе. Надо рассмотреть все пары диапазонов. Через sql я бы решил, используя соединение "таблицу следующего вида" саму с собой, по условию равенства поля "лицевой". Что-то в виде select * // здесь процедура сравнения двух диапазонов, из T1 и T2 from TSV T1 join TSV T2 on (T1.лицевой = T2.лицевой ) and (T1.договор > T2.договор) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2014, 10:27 |
|
||
|
|

start [/forum/topic.php?fid=16&msg=34657646&tid=1341178]: |
0ms |
get settings: |
9ms |
get forum list: |
18ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
55ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
51ms |
get tp. blocked users: |
1ms |
| others: | 208ms |
| total: | 358ms |

| 0 / 0 |
