|
Покритикуйте решение - выборка количества пересекающихся периодов | ☑ | ||
---|---|---|---|---|
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 )
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |