|
Пересечение интервалов времени в запросе - выбрать разные интервалы | ☑ | ||
---|---|---|---|---|
0
PCcomCat
12.04.17
✎
14:16
|
Доброго времени, уважаемые!
Туплю. Подскажите, как следующее сделать? Запрос: ВЫБРАТЬ СменыПериодыСмены.Ссылка КАК Смена, СменыПериодыСмены.НомерСтроки КАК НомерСтрокиИнтервала, СменыПериодыСмены.ВремяНачала КАК ВремяНачалаИнтервала, СменыПериодыСмены.ВремяОкончания КАК ВремяОкончанияИнтервала ПОМЕСТИТЬ ТаблицаИнтервалов ИЗ Справочник.Смены.ПериодыСмены КАК СменыПериодыСмены ГДЕ СменыПериодыСмены.Ссылка В(&СписокСмен) ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ТаблицаИнтервалов.Смена, ТаблицаИнтервалов.НомерСтрокиИнтервала, ТаблицаИнтервалов.ВремяНачалаИнтервала, ТаблицаИнтервалов.ВремяОкончанияИнтервала, ТаблицаИнтервалов1.Смена КАК СменаПересечения, ТаблицаИнтервалов1.НомерСтрокиИнтервала КАК НомерСтрокиИнтервалаПересечения, ТаблицаИнтервалов1.ВремяНачалаИнтервала КАК ВремяНачалаИнтервалаПересечения, ТаблицаИнтервалов1.ВремяОкончанияИнтервала КАК ВремяОкончанияИнтервалаПересечения ИЗ ТаблицаИнтервалов КАК ТаблицаИнтервалов ВНУТРЕННЕЕ СОЕДИНЕНИЕ ТаблицаИнтервалов КАК ТаблицаИнтервалов1 ПО (НЕ ТаблицаИнтервалов.Смена = ТаблицаИнтервалов1.Смена) И (ТаблицаИнтервалов.ВремяНачалаИнтервала МЕЖДУ ТаблицаИнтервалов1.ВремяНачалаИнтервала И ТаблицаИнтервалов1.ВремяОкончанияИнтервала ИЛИ ТаблицаИнтервалов.ВремяОкончанияИнтервала МЕЖДУ ТаблицаИнтервалов1.ВремяНачалаИнтервала И ТаблицаИнтервалов1.ВремяОкончанияИнтервала) В результате получаю две строки: Смена 1 пересекается со сменой 2 Смена 2 пересекается со сменой 1 Нужно свернуть в одну. Как? |
|||
1
PCcomCat
13.04.17
✎
10:01
|
Подниму тему.
Я реализовала через группировку по интервалу пересечения. (Запрос немного другой.) Но ... мне не нравится немного, т.к. есть опасения, что могут совпасть пересечения интервалов для нескольких смен. Может, делал кто подобное? Поделитесь опытом. |
|||
2
Лодырь
13.04.17
✎
10:08
|
(1) Слушай, ну заменить еще одним запросом пары 1-2 и 2-1 на 1-2, 1-2 и выбрать уникальные - думаю несложно Главное чтобы придумать порядок среди смен.
|
|||
3
PCcomCat
13.04.17
✎
10:09
|
(2) Не уловлю... Можно подробнее?
|
|||
4
PCcomCat
13.04.17
✎
10:10
|
+(3)Вернее, я понимаю, что как-то так. Но, блин, не сведу мысли в кучу...
|
|||
5
PCcomCat
13.04.17
✎
10:11
|
Вот так получила нужный результат, но мне не нравится текст:
ВЫБРАТЬ СменыПериодыСмены.Ссылка КАК Смена, СменыПериодыСмены.НомерСтроки КАК НомерСтрокиИнтервала, СменыПериодыСмены.ВремяНачала КАК ВремяНачалаИнтервала, СменыПериодыСмены.ВремяОкончания КАК ВремяОкончанияИнтервала ПОМЕСТИТЬ ТаблицаИнтервалов ИЗ Справочник.Смены.ПериодыСмены КАК СменыПериодыСмены ГДЕ СменыПериодыСмены.Ссылка В(&СписокСмен) ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ТаблицаИнтервалов.Смена, ТаблицаИнтервалов.НомерСтрокиИнтервала, ТаблицаИнтервалов.ВремяНачалаИнтервала, ТаблицаИнтервалов.ВремяОкончанияИнтервала, ТаблицаИнтервалов1.Смена КАК СменаПересечения, ТаблицаИнтервалов1.ВремяНачалаИнтервала КАК ВремяНачалаИнтервала1, ТаблицаИнтервалов1.ВремяОкончанияИнтервала КАК ВремяОкончанияИнтервала1, ТаблицаИнтервалов1.НомерСтрокиИнтервала КАК НомерСтрокиИнтервалаПересечения, ВЫБОР КОГДА ТаблицаИнтервалов.ВремяНачалаИнтервала > ТаблицаИнтервалов1.ВремяНачалаИнтервала ТОГДА ТаблицаИнтервалов.ВремяНачалаИнтервала ИНАЧЕ ТаблицаИнтервалов1.ВремяНачалаИнтервала КОНЕЦ КАК ВремяНачалаИнтервалаПересечения, ВЫБОР КОГДА ТаблицаИнтервалов.ВремяОкончанияИнтервала < ТаблицаИнтервалов1.ВремяОкончанияИнтервала ТОГДА ТаблицаИнтервалов.ВремяОкончанияИнтервала ИНАЧЕ ТаблицаИнтервалов1.ВремяОкончанияИнтервала КОНЕЦ КАК ВремяОкончанияИнтервалаПересечения ПОМЕСТИТЬ ТаблицаПересечений ИЗ ТаблицаИнтервалов КАК ТаблицаИнтервалов ВНУТРЕННЕЕ СОЕДИНЕНИЕ ТаблицаИнтервалов КАК ТаблицаИнтервалов1 ПО (НЕ ТаблицаИнтервалов.Смена = ТаблицаИнтервалов1.Смена) И (ТаблицаИнтервалов.ВремяНачалаИнтервала МЕЖДУ ТаблицаИнтервалов1.ВремяНачалаИнтервала И ТаблицаИнтервалов1.ВремяОкончанияИнтервала ИЛИ ТаблицаИнтервалов.ВремяОкончанияИнтервала МЕЖДУ ТаблицаИнтервалов1.ВремяНачалаИнтервала И ТаблицаИнтервалов1.ВремяОкончанияИнтервала) ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ МИНИМУМ(ТаблицаПересечений.НомерСтрокиИнтервала) КАК НомерСтрокиИнтервала, МАКСИМУМ(ТаблицаПересечений.НомерСтрокиИнтервалаПересечения) КАК НомерСтрокиИнтервалаПересечения, ТаблицаПересечений.ВремяНачалаИнтервалаПересечения, ТаблицаПересечений.ВремяОкончанияИнтервалаПересечения ПОМЕСТИТЬ РазличныеПересечения ИЗ ТаблицаПересечений КАК ТаблицаПересечений СГРУППИРОВАТЬ ПО ТаблицаПересечений.ВремяНачалаИнтервалаПересечения, ТаблицаПересечений.ВремяОкончанияИнтервалаПересечения ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ТаблицаПересечений.Смена, ТаблицаПересечений.НомерСтрокиИнтервала, ТаблицаПересечений.ВремяНачалаИнтервала КАК ВремяНачалаИнтервала, ТаблицаПересечений.ВремяОкончанияИнтервала КАК ВремяОкончанияИнтервала, ТаблицаПересечений.СменаПересечения, ТаблицаПересечений.ВремяНачалаИнтервала1, ТаблицаПересечений.ВремяОкончанияИнтервала1, ТаблицаПересечений.НомерСтрокиИнтервалаПересечения, ТаблицаПересечений.ВремяНачалаИнтервалаПересечения, ТаблицаПересечений.ВремяОкончанияИнтервалаПересечения ИЗ РазличныеПересечения КАК РазличныеПересечения ВНУТРЕННЕЕ СОЕДИНЕНИЕ ТаблицаПересечений КАК ТаблицаПересечений ПО РазличныеПересечения.НомерСтрокиИнтервала = ТаблицаПересечений.НомерСтрокиИнтервала И РазличныеПересечения.НомерСтрокиИнтервалаПересечения = ТаблицаПересечений.НомерСтрокиИнтервалаПересечения И РазличныеПересечения.ВремяНачалаИнтервалаПересечения = ТаблицаПересечений.ВремяНачалаИнтервалаПересечения И РазличныеПересечения.ВремяОкончанияИнтервалаПересечения = ТаблицаПересечений.ВремяОкончанияИнтервалаПересечения УПОРЯДОЧИТЬ ПО ВремяНачалаИнтервала, ВремяОкончанияИнтервала |
|||
6
PCcomCat
13.04.17
✎
10:12
|
Как вставлять текст в форуме, чтобы он весь сворачивался в группировку?
|
|||
7
Naf2017
13.04.17
✎
10:14
|
но могут же и 3 и 4 смены "смыкаться" в один интервал?
|
|||
8
PCcomCat
13.04.17
✎
10:16
|
(7)Нужно исключить наложение.
|
|||
9
Naf2017
13.04.17
✎
10:18
|
например, на числах:
(1,5) (2,7) (3,8) (4,10) должно превратиться в (1,10) так? |
|||
10
PCcomCat
13.04.17
✎
10:20
|
В качестве эксперимента использую интервалы, чтобы впоймать пересечения:
Смена 1: 08:00 - 10:00 10:15 - 12:00 13:00 - 15:00 15:15 - 18:00 Смена 2: 16:00 - 19:15 19:30 - 21:15 22:15 - 00:15 00:30 - 02:15 02:30 - 10:10 |
|||
11
PCcomCat
13.04.17
✎
10:21
|
Пересечения Смены1 и Смены 2 в интервале: 08:00 - 10:00
16:00 - 18:00 |
|||
12
Вафель
13.04.17
✎
10:21
|
нужно просто найти пересечения и все?
|
|||
13
Лодырь
13.04.17
✎
10:21
|
Что должно быть на выходе в твоем тестовом примере?
|
|||
14
Вафель
13.04.17
✎
10:22
|
Начало1 < Окончание2 И Начало2 < Окончание1
|
|||
15
Naf2017
13.04.17
✎
10:28
|
(11) смен всего две?
|
|||
16
PCcomCat
13.04.17
✎
10:31
|
(15)Я не могу спрогнозировать, сколько их будет. Может две а может и три. А могут переназначить, а там кривые интервалы. Нужно предупредить ситуации.
|
|||
17
PCcomCat
13.04.17
✎
10:34
|
(14) ))) Получаю туже фигню:
Смена 2 интервал 5 - Смена 1 интервал 1 - пересечение 08:00 - 10:00 Смена 1 интервал 1 - Смена 2 интервал 5 - пересечение 08:00 - 10:00 Смена 2 интервал 1 - Смена 1 интервал 4 - пересечение 16:00 - 18:00 Смена 1 интервал 4 - Смена 2 интервал 1 - пересечение 16:00 - 18:00 |
|||
18
PCcomCat
13.04.17
✎
10:35
|
Программно, конечно, выберу уникальные. Но хотелось запросом получить...
|
|||
19
Naf2017
13.04.17
✎
10:37
|
1. запрос в (0) поместить в временную таблицу
2. далее ее же и вывести, но ВЫБРАТЬ РАЗЛИЧНЫЕ и ВЫБОР КОГДА Смена.Наименование>СменаПересечения.Наименование ТОГДА СменаПересечения ИНАЧЕ Смена КОНЕЦ КАК Смена и ВЫБОР КОГДА Смена.Наименование>СменаПересечения.Наименование ТОГДА Смена ИНАЧЕ СменаПересечения КОНЕЦ КАК СменаПересечения |
|||
20
PCcomCat
13.04.17
✎
10:40
|
(19) Не то что-то написал.
|
|||
21
PCcomCat
13.04.17
✎
10:59
|
Ладно, обработаю программно. Спасибо всем!
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |