|
|
|
Пересечение диапозонов дат
|
|||
|---|---|---|---|
|
#18+
есть таблица: Код: plsql 1. 2. 3. 4. 5. 6. 7. Нужно найти пользователей(employee_id ) у которых есть пересечение диапазонов дат. ожидаю примерно такой результат: 1000000,1000371,2013-02-13 06:00:00,2013-02-13 15:00:00 1000001,1000371,2013-02-13 12:00:00,2013-02-13 18:00:00 ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2014, 19:14:51 |
|
||
|
Пересечение диапозонов дат
|
|||
|---|---|---|---|
|
#18+
с точностью до синтаксиса решение в лоб (ибо нет количественных характеристик сервера). Код: sql 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2014, 19:26:06 |
|
||
|
Пересечение диапозонов дат
|
|||
|---|---|---|---|
|
#18+
Код: sql 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2014, 20:59:00 |
|
||
|
Пересечение диапозонов дат
|
|||
|---|---|---|---|
|
#18+
от первого запроса бд упала, а от второй выдал больше строк в результате чем есть в таблице. нужны только те строки которые пересекаются между собой ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2014, 22:15:55 |
|
||
|
Пересечение диапозонов дат
|
|||
|---|---|---|---|
|
#18+
Грек Финский, если вспомнить курс школьной математики за 5-й класс, где проходят числовой луч и работу с отрезками, то станет ясно - два отрезка пересекаются (имеют одну и более общих точек), если каждое из кончал отрезков больше каждого из начал этих отрезков. ну или в терминах твоей таблицы: Код: sql 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.03.2014, 05:15:45 |
|
||
|
Пересечение диапозонов дат
|
|||
|---|---|---|---|
|
#18+
Грек Финскийвторой выдал больше строк в результате чем есть в таблице.При джойне - это нормально. Ибо каждое пересечение будет "умножать" строки исходной таблицы. Если нужно вывести строки, для которых существует пересечение по дате, при этом не пристыковывать "сбоку" те строки, с которыми есть пересечение, то нужно JOIN заменять на EXISTS-подзапрос: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.03.2014, 06:30:11 |
|
||
|
Пересечение диапозонов дат
|
|||
|---|---|---|---|
|
#18+
Грек Финский от второй выдал больше строк в результате чем есть в таблице. Замените benween на два неравенства. Причём первое сделайте строгим. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.03.2014, 11:41:31 |
|
||
|
Пересечение диапозонов дат
|
|||
|---|---|---|---|
|
#18+
Добрый Э - ЭхГрек Финский, если вспомнить курс школьной математики за 5-й класс, где проходят числовой луч и работу с отрезками, то станет ясно - два отрезка пересекаются (имеют одну и более общих точек), если каждое из кончал отрезков больше каждого из начал этих отрезков. ну или в терминах твоей таблицы: Код: sql 1. 2. 3. 4. 5. 6. а вот такой запрос как правило быстрее будет работать Код: sql 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.03.2014, 12:38:16 |
|
||
|
Пересечение диапозонов дат
|
|||
|---|---|---|---|
|
#18+
bochkovДобрый Э - ЭхГрек Финский, если вспомнить курс школьной математики за 5-й класс, где проходят числовой луч и работу с отрезками, то станет ясно - два отрезка пересекаются (имеют одну и более общих точек), если каждое из кончал отрезков больше каждого из начал этих отрезков. ну или в терминах твоей таблицы: Код: sql 1. 2. 3. 4. 5. 6. а вот такой запрос как правило быстрее будет работать Код: sql 1. 2. 3. 4. 5. 6. Может и быстрее, но неправильно. Там OR нужен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.03.2014, 12:45:03 |
|
||
|
Пересечение диапозонов дат
|
|||
|---|---|---|---|
|
#18+
bochkov, скорее всего - как исключение, а не как правило. ну и без убедительных доказательных аргументов в виде планов запросов и статистики выполнения - не считово. ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.03.2014, 12:48:58 |
|
||
|
Пересечение диапозонов дат
|
|||
|---|---|---|---|
|
#18+
bochkovа вот такой запрос как правило быстрее будет работать Код: sql 1. 2. 3. 4. 5. 6. выделенное - всегда тождественно ложно. Посему запрос изначально - нерабочий. Если даже предположить, что он бстрее, то всё одно грош цена ему. Ибо он не делает главного - не решает поставленной задачи :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.03.2014, 12:52:59 |
|
||
|
Пересечение диапозонов дат
|
|||
|---|---|---|---|
|
#18+
Добрый Э - Эхbochkovа вот такой запрос как правило быстрее будет работать Код: sql 1. 2. 3. 4. 5. 6. выделенное - всегда тождественно ложно.Не всегда. За исключением случая, когда s1.startdatetime=s2.startdatetime ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.03.2014, 12:56:46 |
|
||
|
Пересечение диапозонов дат
|
|||
|---|---|---|---|
|
#18+
запросы роняют БД (вылетает по таймауту) Немного поправил второй предложенный запрос: Код: plsql 1. делает почти то что нужно, с остальным разберусь, спасибо всем за помощь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.03.2014, 13:19:16 |
|
||
|
Пересечение диапозонов дат
|
|||
|---|---|---|---|
|
#18+
Грек Финскийзапросы роняют БД (вылетает по таймауту)А индексов, конечно, нет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.03.2014, 13:25:26 |
|
||
|
Пересечение диапозонов дат
|
|||
|---|---|---|---|
|
#18+
сделал испытание, что то результаты разные получились, индекс date_from, date_to прирост производительности налицо, почему результаты разные никак не пойму, я в свое время с этими периодами долго ковырялся, не мог этого не заметить Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.03.2014, 13:57:01 |
|
||
|
|

start [/forum/topic.php?fid=47&gotonew=1&tid=1835058]: |
0ms |
get settings: |
7ms |
get forum list: |
23ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
50ms |
get topic data: |
10ms |
get first new msg: |
6ms |
get forum data: |
3ms |
get page messages: |
59ms |
get tp. blocked users: |
2ms |
| others: | 212ms |
| total: | 378ms |

| 0 / 0 |
