|
Покритикуйте решение - выборка количества пересекающихся периодов |
☑ |
0
mikecool
12.03.21
✎
11:03
|
Вот что у меня вышло:
ВЫБРАТЬ
КОЛИЧЕСТВО(Лево.От) КАК От
ИЗ
Периоды КАК Лево
ЛЕВОЕ СОЕДИНЕНИЕ Периоды КАК Право
ПО (НЕ Лево.От = Право.От)
И (НЕ Лево.До = Право.До)
И Лево.От < Право.До
И Лево.До > Право.От
И Лево.От >= Право.От
ГДЕ
НЕ Право.От ЕСТЬ NULL
где у меня могут быть проколы?
зы: проверял пока на 3х интервалах с разными периодами, вроде результат верный
|
|
1
dka80
12.03.21
✎
11:18
|
10-20
1-10
|
|
2
mikecool
12.03.21
✎
11:24
|
(1) стыкуются, не пересекаются
|
|
3
dka80
12.03.21
✎
11:31
|
(22) как это стыкуются? У них 10 число общий день
10 00:00:00
10 23:59:59
|
|
4
Deon
12.03.21
✎
11:44
|
Только тут не количество пересекающихся периодов, а количество пересечений.
Например, для таких Периодов вернется 6 пересечений:
1-10
2-9
3-8
4-7
И да, запрос некорректно отработает и вернет 5 для таких периодов:
1-10
2-8
3-8
4-7
|
|
5
Deon
12.03.21
✎
11:55
|
Я так понимаю, что этот кусок должен отрезать соединение периода с самим собой?
ПО (НЕ Лево.От = Право.От)
И (НЕ Лево.До = Право.До)
|
|
6
Вафель
12.03.21
✎
12:01
|
пересечение делается так начало1 <= конец2 и конец1 >= начало2
|
|
7
mistеr
12.03.21
✎
13:14
|
(0) (3) (6) Нужно уточнить, интервалы открытые или закрытые, слева и справа. И что означает "стыкуются".
|
|
8
mikecool
12.03.21
✎
14:29
|
(4) проверю
(6) именно, вот только только при таком условии кол-во пересечений х2 из-за соединения одинаковых таблиц
|
|
9
Малыш Джон
12.03.21
✎
15:39
|
(0) Эммм... А что тут проверять?
Если периоды "зацепляются" своими концами, то зацепляются, если нет, то нет
(Право1>Лево2 И Право2>Лево1)
|
|
10
Малыш Джон
12.03.21
✎
15:40
|
+(9) не заметил сразу (6)
|
|
11
Вафель
12.03.21
✎
15:41
|
(8) условие что начало и конец не совпадают НЕ (начало1 = начало2 и конец1 = конец2)
|
|
12
mikecool
12.03.21
✎
15:42
|
(11) ага, вот тут есть косячок, спасибо
|
|
13
Вафель
12.03.21
✎
15:42
|
хотя если в таблице есть одинаковые периоды, то нужно еще и уникальное поле проверять
|
|
14
Вафель
12.03.21
✎
15:43
|
(12) забыл на верно как скобки НЕ раскрываются
|
|
15
mikecool
12.03.21
✎
15:44
|
+12 хотя стоп
НЕ (начало1 = начало2 и конец1 = конец2) == НЕ начало1 = начало2 ИЛИ Не конец1 = конец2
а это неверно
|
|
16
Малыш Джон
12.03.21
✎
15:45
|
(11) не, не поможет
проблема в том, что сначала период1 сверяется с периодом 2, а потом период2 сравнивается с периодом 1
|
|
17
Малыш Джон
12.03.21
✎
15:46
|
(15) если делаешь соединение таблицы саму с собой, т.е. точно знаешь, что идентичные данные сравниваются, т.е. точно задвоится количество - дели на 2 )
|
|
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший