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