|   |   | 
| 
 | 1c Запрос пересечение двух таблиц | ☑ | ||
|---|---|---|---|---|
| 0
    
        illiona naïve 15.11.23✎ 12:55 | 
        Добрый день. Две талицы, надо вывести пересечение по периоду между ними
 "ВЫБРАТЬ | ТабДокументы.ДокументСсылка КАК ДокументСсылка, | ТабДокументы.ДатаНачала КАК ДатаНачала, | ТабДокументы.ДатаОкончания КАК ДатаОкончания, | ТабДокументы.Сотрудник КАК Сотрудник | ПОМЕСТИТЬ ТабДокументы | ИЗ | &ТаблицаДокументов КАК ТабДокументы | ; | | //////////////////////////////////////////////////////////////////////////////// | ВЫБРАТЬ | ТабДокумент.ДокументСсылка КАК ДокументСсылка, | ТабДокумент.ДатаНачала КАК ДатаНачала, | ТабДокумент.ДатаОкончания КАК ДатаОкончания, | ТабДокумент.Сотрудник КАК Сотрудник | ПОМЕСТИТЬ ТабДокументы1 | ИЗ | &ТаблицаДокументов КАК ТабДокумент | ; | | //////////////////////////////////////////////////////////////////////////////// | ВЫБРАТЬ | ТабДокументы.ДокументСсылка КАК ПервыйДокумент, | ТабДокументы1.ДокументСсылка КАК ДокументСсылка, | ТабДокументы.Сотрудник КАК Сотрудник, | ТабДокументы.ДатаНачала КАК ДатаНачала, | ТабДокументы.ДатаОкончания КАК ДатаОкончания, | ТабДокументы1.ДатаНачала КАК ДатаНачала1, | ТабДокументы1.ДатаОкончания КАК ДатаОкончания1 | ИЗ | ТабДокументы КАК ТабДокументы | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ТабДокументы1 КАК ТабДокументы1 | ПО (ТабДокументы1.ДатаНачала МЕЖДУ ТабДокументы.ДатаНачала И ТабДокументы.ДатаОкончания) | И (ТабДокументы1.ДатаОкончания МЕЖДУ ТабДокументы.ДатаНачала И ТабДокументы.ДатаОкончания) | И ТабДокументы.ДокументСсылка <> ТабДокументы1.ДокументСсылка | И ТабДокументы.Сотрудник = ТабДокументы1.Сотрудник" https://disk.yandex.ru/i/THrjMrB91TbZEQ Получается двойное пересечение | |||
| 1
    
        Bigbro 15.11.23✎ 13:03 | 
        а как ты хочешь?
 каждый с каждым пересекается но не с собой. | |||
| 2
    
        illiona naïve 15.11.23✎ 13:04 | 
        получается, мне надо чтоб одна запись осталась, поидее они одинаковые     | |||
| 3
    
        Bigbro 15.11.23✎ 13:06 | 
        с чего это вдруг они одинаковые.
 в первой записи док1 док2 во второй записи док2, док1 | |||
| 4
    
        illiona naïve 15.11.23✎ 13:11 | 
        т.е. получается это верно?     | |||
| 5
    
        nodrama 15.11.23✎ 13:13 | 
        я думаю автор хотел что бы строчка была одна в итоге, а не две как на картинке. так как у этих двух доков одинаковый период сотрудник и тд     | |||
| 6
    
        illiona naïve 15.11.23✎ 13:15 | 
        а если всё таки именно при таких случаях скажут выводит одну запись, что в запросе надо поменять?     | |||
| 7
    
        illiona naïve 15.11.23✎ 13:16 | 
        (5) да нужна в таких случаях одна строка     | |||
| 8
    
        maxab72 15.11.23✎ 13:46 | 
        (7) При объединении сравнивать документы по УИД через ВЫБОР КОГДА, и тот что с меньшим - ставить всегда первым реквизитом. и ВЫБРАТь РАЗЛИЧНЫЕ.     | |||
| 9
    
        Лирик 15.11.23✎ 13:54 | 
        Интересно, что покажет запрос когда ТабДокументы1.ДатаНачала<=ТабДокументы.ДатаНачала И ТабДокументы1.ДатаОкончания>=ТабДокументы.ДатаНачала
 Ну если конечно один документ "Отсутствие с сохранением оплаты" может "закрыть" сразу 2 больничных. | |||
| 10
    
        illiona naïve 15.11.23✎ 15:16 | 
        (9) тоже самое получается     | |||
| 11
    
        Bigbro 15.11.23✎ 15:28 | 
        попробуй по датам сделать строгое неравенство. по идее таблица 1 внутри второй. 
 между видимо равенство тоже учитывает из за этого задваивается. | |||
| 12
    
        illiona naïve 15.11.23✎ 15:32 | 
        (11) не поняла где сделать строгое равенство     | |||
| 13
    
        Bigbro 15.11.23✎ 15:36 | 
        ПО (ТабДокументы1.ДатаНачала МЕЖДУ ТабДокументы.ДатаНачала И ТабДокументы.ДатаОкончания)
 вот тут между срабатывает когда дата1 = дата2 надо чтобы при равенстве не срабатывало условие. было строго > | |||
| 14
    
        illiona naïve 15.11.23✎ 16:28 | 
        при строгом равенстве, пустой запрос     | |||
| 15
    
        illiona naïve 15.11.23✎ 16:35 | 
        |        ////////////////////////////////////////////////////////////////////////////////
 | ВЫБРАТЬ | ТабДокументы.ДокументСсылка КАК ПервыйДокумент, | ТабДокументы1.ДокументСсылка КАК ДокументСсылка, | ТабДокументы.Сотрудник КАК Сотрудник, | ТабДокументы.ДатаНачала КАК ДатаНачала, | ТабДокументы.ДатаОкончания КАК ДатаОкончания, | ТабДокументы1.ДатаНачала КАК ДатаНачала1, | ТабДокументы1.ДатаОкончания КАК ДатаОкончания1 | ИЗ | ТабДокументы КАК ТабДокументы | ВНУТРЕнНЕЕ СОЕДИНЕНИЕ ТабДокументы1 КАК ТабДокументы1 | ПО (ТабДокументы1.ДатаНачала > ТабДокументы.ДатаНачала И ТабДокументы1.ДатаНачала < ТабДокументы.ДатаОкончания) | И (ТабДокументы1.ДатаОкончания МЕЖДУ ТабДокументы.ДатаНачала И ТабДокументы.ДатаОкончания) | И ТабДокументы.ДокументСсылка <> ТабДокументы1.ДокументСсылка | И ТабДокументы.Сотрудник = ТабДокументы1.Сотрудник" | |||
| 16
    
        Лирик 15.11.23✎ 16:35 | 
        (10) Простите не увидел, что у вас таблица одна и та же.
 Ввело в заблуждение в (0) "Две таблицы". Тогда не надо второй раз выбирать во временную таблицу: "ВЫБРАТЬ | ТабДокументы.ДокументСсылка КАК ДокументСсылка, | ТабДокументы.ДатаНачала КАК ДатаНачала, | ТабДокументы.ДатаОкончания КАК ДатаОкончания, | ТабДокументы.Сотрудник КАК Сотрудник, | АВТОНОМЕРЗАПИСИ() КАК Автономер |ПОМЕСТИТЬ ТабДокументы |ИЗ | &ТаблицаДокументов КАК ТабДокументы |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ТабДокументы.ДокументСсылка КАК ПервыйДокумент, | ТабДокументы1.ДокументСсылка КАК ДокументСсылка, | ТабДокументы.Сотрудник КАК Сотрудник, | ТабДокументы.ДатаНачала КАК ДатаНачала, | ТабДокументы.ДатаОкончания КАК ДатаОкончания, | ТабДокументы1.ДатаНачала КАК ДатаНачала1, | ТабДокументы1.ДатаОкончания КАК ДатаОкончания1 |ИЗ | ТабДокументы КАК ТабДокументы | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ТабДокументы КАК ТабДокументы1 | ПО ТабДокументы.Сотрудник = ТабДокументы1.Сотрудник | И (ТабДокументы.ДатаНачала МЕЖДУ ТабДокументы1.ДатаНачала И ТабДокументы1.ДатаОкончания | ИЛИ ТабДокументы.ДатаОкончания МЕЖДУ ТабДокументы1.ДатаНачала И ТабДокументы1.ДатаОкончания | ИЛИ ТабДокументы1.ДатаНачала МЕЖДУ ТабДокументы.ДатаНачала И ТабДокументы.ДатаОкончания | ИЛИ ТабДокументы1.ДатаОкончания МЕЖДУ ТабДокументы.ДатаНачала И ТабДокументы.ДатаОкончания) | И ТабДокументы.Автономер > ТабДокументы1.Автономер" Соединение по автономеру "убъет" дубли, дополнительное сравнение интервалов в связи позволит найти интервалы пересекающиеся как в одну, так и в другую сторону. Связь по ссылкам не нужна, ее заменяет строгое сравнение Автономера. Естественно в исходной таблице не должно быть дублей строк. (13) Тогда из выборки выпадут пары документов с одинаковыми датами начала и окончания | |||
| 17
    
        НафНаф 15.11.23✎ 22:39 | 
        (16) не нужен автономен. Достаточно одна ссылка больше другой     | |||
| 18
    
        Волшебник 15.11.23✎ 22:48 | 
        (17) ссылки не сравниваются на больше-меньше     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |