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