|
|
|
Поиск каких либо пересечений
|
|||
|---|---|---|---|
|
#18+
Добрый день! Предположим есть такая таблица (трудовая книжка) со столбцами id_personal, date_begin, date_end, org_name 68909209 21.03.1987 30.06.1987 Главное финансовое управление Мособлисполкома 68909209 09.12.1982 20.03.1987 Финансовое управление Мособлисполкома 68909209 25.11.1981 08.12.1982 Финансовый отдел Мособлисполкома 68909209 01.06.1981 24.11.1981 Шатурский Горфинотдел 68909209 15.08.1978 04.06.1979 Шатурский районный узел связи 68909351 21.03.1987 03.11.1993 Главное финансовое управление Мособлисполкома 68909351 09.12.1982 20.03.1987 Финансовое управление Мособлисполкома 68909351 01.03.1979 08.12.1982 Финансовый отдел Мособлисполкома 68909351 01.10.1974 28.02.1979 Финансовый отдел Мособлисполкома 68909351 28.08.1972 30.09.1974 Финансовый отдел Мособлисполкома В итоговую таблицу должны попать следующие строчки 68909209 25.11.1981 08.12.1982 Финансовый отдел Мособлисполкома 68909351 01.03.1979 08.12.1982 Финансовый отдел Мособлисполкома Попадают они потому, что у них есть какой то период (в данном случае 25.11.1981 - 08.12.1982) который содержится в обоих исходных периодах и + наименование организации - одно и то же. То есть другими словами, найти людей, которые когда то раньше вместе работали. Исходная таблица очень большая! То есть брать каждую дату и сверять ее с оставшимися - не подойдет. Подскажите пожалуйста алгоритм. Заранее спасибо :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2013, 16:43 |
|
||
|
Поиск каких либо пересечений
|
|||
|---|---|---|---|
|
#18+
Несколько мыслей. Первое что приходит в голову - побить задачу на части и решить ее отдельно для каждого ведомства. Второе - посчитать max, min для кадждой группы и побить его на под-отрезки (2,4,8) но только так чтоб граница не резала интервалы трудовых книжек. И тоже решить отдельно. В конце - слить результаты в общий отчёт. Если отрезки - кратные дням то можно как-то соптимизировать биткартой операции поиска пересечений. Вообще на SQL как мне кажется эта задача решается неэффективно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2013, 17:56 |
|
||
|
Поиск каких либо пересечений
|
|||
|---|---|---|---|
|
#18+
OoCcamazona, Вопрос элементарный для правильного форума. Обратись в SQL Server форум При чём здесь вообще форум по MS-SQL-сервер? А в других DBMS эта задача принципиально не решается? Или решается неэффективно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2013, 14:23 |
|
||
|
Поиск каких либо пересечений
|
|||
|---|---|---|---|
|
#18+
mayton, Выбери DVMS по своему усмотрению. В чем проблема-то? Аллергия на MS SQL? Посмотри топики ТС для начала. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2013, 16:19 |
|
||
|
Поиск каких либо пересечений
|
|||
|---|---|---|---|
|
#18+
Посмотрел на топики ТС. Какие можно сделать из них выводы? Их всего два. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2013, 16:21 |
|
||
|
Поиск каких либо пересечений
|
|||
|---|---|---|---|
|
#18+
mayton, И какой там второй форум с 9 вопросами? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2013, 16:26 |
|
||
|
Поиск каких либо пересечений
|
|||
|---|---|---|---|
|
#18+
amazonaДобрый день! Предположим есть такая таблица (трудовая книжка) со столбцами id_personal, date_begin, date_end, org_name 68909209 21.03.1987 30.06.1987 Главное финансовое управление Мособлисполкома 68909209 09.12.1982 20.03.1987 Финансовое управление Мособлисполкома 68909209 25.11.1981 08.12.1982 Финансовый отдел Мособлисполкома 68909209 01.06.1981 24.11.1981 Шатурский Горфинотдел 68909209 15.08.1978 04.06.1979 Шатурский районный узел связи 68909351 21.03.1987 03.11.1993 Главное финансовое управление Мособлисполкома 68909351 09.12.1982 20.03.1987 Финансовое управление Мособлисполкома 68909351 01.03.1979 08.12.1982 Финансовый отдел Мособлисполкома 68909351 01.10.1974 28.02.1979 Финансовый отдел Мособлисполкома 68909351 28.08.1972 30.09.1974 Финансовый отдел Мособлисполкома В итоговую таблицу должны попать следующие строчки 68909209 25.11.1981 08.12.1982 Финансовый отдел Мособлисполкома 68909351 01.03.1979 08.12.1982 Финансовый отдел Мособлисполкома Попадают они потому, что у них есть какой то период (в данном случае 25.11.1981 - 08.12.1982) который содержится в обоих исходных периодах и + наименование организации - одно и то же. То есть другими словами, найти людей, которые когда то раньше вместе работали. Исходная таблица очень большая! То есть брать каждую дату и сверять ее с оставшимися - не подойдет. Подскажите пожалуйста алгоритм. Заранее спасибо :)Очень большая - это сколько? Все равно придется сравнивать... Я бы для начала соединил таблицу саму с собой и написал условия: Код: sql 1. 2. 3. 4. 5. Ну и еще сравнение дат написать. А потом можно проанализировать распределение данных в исходных таблицах и попробовать индексов добавить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2013, 16:36 |
|
||
|
Поиск каких либо пересечений
|
|||
|---|---|---|---|
|
#18+
А что за организация? Я тут нагуглил, что в РЖД работает миллион человек. Все чиновники, армия и полиция - еще по миллиону. Остальные организации существенно меньше, чего там сложного-то? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2013, 16:41 |
|
||
|
Поиск каких либо пересечений
|
|||
|---|---|---|---|
|
#18+
OoCc, предлагаю свернуть оффтоп. Мы обсуждаем личности а не тему вопроса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2013, 17:37 |
|
||
|
Поиск каких либо пересечений
|
|||
|---|---|---|---|
|
#18+
id_personal date_begin date_end org_name68909209 21.03.1987 30.06.1987 Главное финансовое управление Мособлисполкома68909209 09.12.1982 20.03.1987 Финансовое управление Мособлисполкома68909209 25.11.1981 08.12.1982 Финансовый отдел Мособлисполкома68909209 01.06.1981 24.11.1981 Шатурский Горфинотдел68909209 15.08.1978 04.06.1979 Шатурский районный узел связи68909351 21.03.1987 03.11.1993 Главное финансовое управление Мособлисполкома68909351 09.12.1982 20.03.1987 Финансовое управление Мособлисполкома68909351 01.03.1979 08.12.1982 Финансовый отдел Мособлисполкома68909351 01.10.1974 28.02.1979 Финансовый отдел Мособлисполкома68909351 28.08.1972 30.09.1974 Финансовый отдел МособлисполкомаВ итоговую таблицу должны попать следующие строчки 68909209 25.11.1981 08.12.1982 Финансовый отдел Мособлисполкома68909351 01.03.1979 08.12.1982 Финансовый отдел Мособлисполкома у меня же получактся другое 68909209 68909351 Главное финансовое управление Мособлисполкома 21.03.1987- 30.06.1987 21.03.1987- 03.11.1993 Финансовое управление Мособлисполкома 09.12.1982- 20.03.1987 09.12.1982- 20.03.1987 Финансовый отдел Мособлисполкома 25.11.1981- 08.12.1982 01.03.1979- 08.12.1982 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2013, 03:14 |
|
||
|
|

start [/forum/topic.php?fid=16&fpage=55&tid=1341738]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
317ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
72ms |
get tp. blocked users: |
1ms |
| others: | 239ms |
| total: | 671ms |

| 0 / 0 |
