Вход | Регистрация
 

Покритикуйте решение - выборка количества пересекающихся периодов

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

Список тем форума
 
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.