Нужна помощь от знатоков запросов
Коллеги доброго времени суток!
Помогите с запросом. Мне нужно из таблицы со скриншота 1, сделать таблицу как на скриншоте 2
Если добавить признак что ТС находится на маршруте.
На маршруте считается, если вход начинается на начальной точке и выход заканчивается на конечной. входы и выход между этими точками тоже считаются на маршруте.
Текст запроса из примера
Помогите с запросом. Мне нужно из таблицы со скриншота 1, сделать таблицу как на скриншоте 2
Если добавить признак что ТС находится на маршруте.
На маршруте считается, если вход начинается на начальной точке и выход заканчивается на конечной. входы и выход между этими точками тоже считаются на маршруте.
Текст запроса из примера
ВЫБРАТЬ
ВложенныйЗапрос.ВходЗону КАК ВходЗону,
ВложенныйЗапрос.ВыходИзЗоны КАК ВыходИзЗоны,
ВложенныйЗапрос.ТС КАК ТС,
ВложенныйЗапрос.Зона КАК Зона,
ВложенныйЗапрос.НачальнаяТочка КАК НачальнаяТочка,
ВложенныйЗапрос.КонечнаяТочка КАК КонечнаяТочка
ИЗ
(ВЫБРАТЬ
ДАТАВРЕМЯ(2019, 5, 10, 2, 6, 49) КАК ВходЗону,
ДАТАВРЕМЯ(2019, 5, 10, 2, 41, 4) КАК ВыходИзЗоны,
"К358ЕС" КАК ТС,
"Дорога Восточная" КАК Зона,
ЛОЖЬ КАК НачальнаяТочка,
ЛОЖЬ КАК КонечнаяТочка
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
ДАТАВРЕМЯ(2019, 5, 10, 2, 6, 49),
ДАТАВРЕМЯ(2019, 5, 10, 2, 41, 4),
"К358ЕС",
"Дорога Колывановская",
ЛОЖЬ,
ЛОЖЬ
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
ДАТАВРЕМЯ(2019, 5, 10, 2, 41, 4),
ДАТАВРЕМЯ(2019, 5, 10, 3, 52, 45),
"К358ЕС",
"Разрез Восточный",
ИСТИНА,
ЛОЖЬ
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
ДАТАВРЕМЯ(2019, 5, 10, 3, 52, 45),
ДАТАВРЕМЯ(2019, 5, 10, 4, 30, 30),
"К358ЕС",
"Дорога Колывановская",
ЛОЖЬ,
ЛОЖЬ
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
ДАТАВРЕМЯ(2019, 5, 10, 3, 52, 45),
ДАТАВРЕМЯ(2019, 5, 10, 4, 30, 30),
"К358ЕС",
"Дорога Восточная",
ЛОЖЬ,
ЛОЖЬ
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
ДАТАВРЕМЯ(2019, 5, 10, 4, 30, 30),
ДАТАВРЕМЯ(2019, 5, 10, 4, 45, 23),
"К358ЕС",
"Склад",
ЛОЖЬ,
ИСТИНА
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
ДАТАВРЕМЯ(2019, 5, 10, 4, 37, 0),
ДАТАВРЕМЯ(2019, 5, 10, 4, 45, 1),
"К358ЕС",
"Весы",
ЛОЖЬ,
ЛОЖЬ
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
ДАТАВРЕМЯ(2019, 5, 10, 4, 45, 23),
ДАТАВРЕМЯ(2019, 5, 10, 4, 45, 1),
"К358ЕС",
"Дорога Восточная",
ЛОЖЬ,
ЛОЖЬ
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
ДАТАВРЕМЯ(2019, 5, 10, 4, 45, 23),
ДАТАВРЕМЯ(2019, 5, 10, 4, 45, 1),
"К358ЕС",
"Дорога Колывановская",
ЛОЖЬ,
ЛОЖЬ) КАК ВложенныйЗапрос
УПОРЯДОЧИТЬ ПО
ВходЗону
ПоказатьПрикрепленные файлы:
По теме из базы знаний
Найденные решения
(1)Например, так:
ВЫБРАТЬ
ВложенныйЗапрос.ВходЗону КАК ВходЗону,
ВложенныйЗапрос.ВыходИзЗоны КАК ВыходИзЗоны,
ВложенныйЗапрос.ТС КАК ТС,
ВложенныйЗапрос.Зона КАК Зона,
ВложенныйЗапрос.НачальнаяТочка КАК НачальнаяТочка,
ВложенныйЗапрос.КонечнаяТочка КАК КонечнаяТочка,
ВложенныйЗапрос.Состояние КАК Состояние
ПОМЕСТИТЬ Т1
ИЗ
(ВЫБРАТЬ
ДАТАВРЕМЯ(2019, 5, 10, 2, 6, 49) КАК ВходЗону,
ДАТАВРЕМЯ(2019, 5, 10, 2, 41, 4) КАК ВыходИзЗоны,
"К358ЕС" КАК ТС,
"Дорога Восточная" КАК Зона,
ЛОЖЬ КАК НачальнаяТочка,
ЛОЖЬ КАК КонечнаяТочка,
"Вне маршрута" КАК Состояние
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
ДАТАВРЕМЯ(2019, 5, 10, 2, 6, 49),
ДАТАВРЕМЯ(2019, 5, 10, 2, 41, 4),
"К358ЕС",
"Дорога Колывановская",
ЛОЖЬ,
ЛОЖЬ,
"Вне маршрута"
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
ДАТАВРЕМЯ(2019, 5, 10, 2, 41, 4),
ДАТАВРЕМЯ(2019, 5, 10, 3, 52, 45),
"К358ЕС",
"Разрез Восточный",
ИСТИНА,
ЛОЖЬ,
"На маршруте"
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
ДАТАВРЕМЯ(2019, 5, 10, 3, 52, 45),
ДАТАВРЕМЯ(2019, 5, 10, 4, 30, 30),
"К358ЕС",
"Дорога Колывановская",
ЛОЖЬ,
ЛОЖЬ,
"На маршруте"
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
ДАТАВРЕМЯ(2019, 5, 10, 3, 52, 45),
ДАТАВРЕМЯ(2019, 5, 10, 4, 30, 30),
"К358ЕС",
"Дорога Восточная",
ЛОЖЬ,
ЛОЖЬ,
"На маршруте"
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
ДАТАВРЕМЯ(2019, 5, 10, 4, 30, 30),
ДАТАВРЕМЯ(2019, 5, 10, 4, 45, 23),
"К358ЕС",
"Склад",
ЛОЖЬ,
Истина,
"На маршруте"
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
ДАТАВРЕМЯ(2019, 5, 10, 4, 37, 0),
ДАТАВРЕМЯ(2019, 5, 10, 4, 45, 1),
"К358ЕС",
"Весы",
ЛОЖЬ,
ЛОЖЬ,
"Вне маршрута"
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
ДАТАВРЕМЯ(2019, 5, 10, 4, 45, 23),
ДАТАВРЕМЯ(2019, 5, 10, 4, 45, 41),
"К358ЕС",
"Дорога Восточная",
ЛОЖЬ,
ЛОЖЬ,
"Вне маршрута"
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
ДАТАВРЕМЯ(2019, 5, 10, 4, 45, 41),
ДАТАВРЕМЯ(2019, 5, 10, 4, 45, 43),
"К358ЕС",
"Дорога Колывановская",
ЛОЖЬ,
ЛОЖЬ,
"Вне маршрута") КАК ВложенныйЗапрос
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
Т1.ВходЗону КАК ВходЗону,
МИНИМУМ(ЕстьNull(Т2.ВыходИзЗоны,ДатаВремя(3999,1,1))) КАК ВыходИзЗоны,
ИСТИНА КАК НаМаршруте
ПОМЕСТИТЬ ТПериоды
ИЗ
Т1 КАК Т1
ЛЕВОЕ СОЕДИНЕНИЕ Т1 КАК Т2
ПО Т1.ВходЗону<=Т2.ВыходИзЗоны
И Т2.КонечнаяТочка
ГДЕ
Т1.НачальнаяТочка
СГРУППИРОВАТЬ ПО
Т1.ВходЗону
;
//////////////////////////////////////////////////////////// ////////////////////////
ВЫБРАТЬ
Т1.ВходЗону КАК ВходЗону,
Т1.ВыходИзЗоны КАК ВыходИзЗоны,
Т1.ТС КАК ТС,
Т1.Зона КАК Зона,
Т1.НачальнаяТочка КАК НачальнаяТочка,
Т1.КонечнаяТочка КАК КонечнаяТочка,
ВЫБОР
КОГДА ЕСТЬNULL(ТПериоды.НаМаршруте, ЛОЖЬ) = ИСТИНА
ТОГДА "На маршруте"
ИНАЧЕ "Вне Маршрута"
КОНЕЦ КАК Поле1
ИЗ
Т1 КАК Т1
ЛЕВОЕ СОЕДИНЕНИЕ ТПериоды КАК ТПериоды
ПО Т1.ВходЗону >= ТПериоды.ВходЗону
И Т1.ВыходИзЗоны <= ТПериоды.ВыходИзЗоны
УПОРЯДОЧИТЬ ПО
ВходЗону
ПоказатьОстальные ответы
В избранное
Подписаться на ответы
Сортировка:
Древо развёрнутое
Свернуть все
(1)Например, так:
ВЫБРАТЬ
ВложенныйЗапрос.ВходЗону КАК ВходЗону,
ВложенныйЗапрос.ВыходИзЗоны КАК ВыходИзЗоны,
ВложенныйЗапрос.ТС КАК ТС,
ВложенныйЗапрос.Зона КАК Зона,
ВложенныйЗапрос.НачальнаяТочка КАК НачальнаяТочка,
ВложенныйЗапрос.КонечнаяТочка КАК КонечнаяТочка,
ВложенныйЗапрос.Состояние КАК Состояние
ПОМЕСТИТЬ Т1
ИЗ
(ВЫБРАТЬ
ДАТАВРЕМЯ(2019, 5, 10, 2, 6, 49) КАК ВходЗону,
ДАТАВРЕМЯ(2019, 5, 10, 2, 41, 4) КАК ВыходИзЗоны,
"К358ЕС" КАК ТС,
"Дорога Восточная" КАК Зона,
ЛОЖЬ КАК НачальнаяТочка,
ЛОЖЬ КАК КонечнаяТочка,
"Вне маршрута" КАК Состояние
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
ДАТАВРЕМЯ(2019, 5, 10, 2, 6, 49),
ДАТАВРЕМЯ(2019, 5, 10, 2, 41, 4),
"К358ЕС",
"Дорога Колывановская",
ЛОЖЬ,
ЛОЖЬ,
"Вне маршрута"
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
ДАТАВРЕМЯ(2019, 5, 10, 2, 41, 4),
ДАТАВРЕМЯ(2019, 5, 10, 3, 52, 45),
"К358ЕС",
"Разрез Восточный",
ИСТИНА,
ЛОЖЬ,
"На маршруте"
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
ДАТАВРЕМЯ(2019, 5, 10, 3, 52, 45),
ДАТАВРЕМЯ(2019, 5, 10, 4, 30, 30),
"К358ЕС",
"Дорога Колывановская",
ЛОЖЬ,
ЛОЖЬ,
"На маршруте"
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
ДАТАВРЕМЯ(2019, 5, 10, 3, 52, 45),
ДАТАВРЕМЯ(2019, 5, 10, 4, 30, 30),
"К358ЕС",
"Дорога Восточная",
ЛОЖЬ,
ЛОЖЬ,
"На маршруте"
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
ДАТАВРЕМЯ(2019, 5, 10, 4, 30, 30),
ДАТАВРЕМЯ(2019, 5, 10, 4, 45, 23),
"К358ЕС",
"Склад",
ЛОЖЬ,
Истина,
"На маршруте"
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
ДАТАВРЕМЯ(2019, 5, 10, 4, 37, 0),
ДАТАВРЕМЯ(2019, 5, 10, 4, 45, 1),
"К358ЕС",
"Весы",
ЛОЖЬ,
ЛОЖЬ,
"Вне маршрута"
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
ДАТАВРЕМЯ(2019, 5, 10, 4, 45, 23),
ДАТАВРЕМЯ(2019, 5, 10, 4, 45, 41),
"К358ЕС",
"Дорога Восточная",
ЛОЖЬ,
ЛОЖЬ,
"Вне маршрута"
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
ДАТАВРЕМЯ(2019, 5, 10, 4, 45, 41),
ДАТАВРЕМЯ(2019, 5, 10, 4, 45, 43),
"К358ЕС",
"Дорога Колывановская",
ЛОЖЬ,
ЛОЖЬ,
"Вне маршрута") КАК ВложенныйЗапрос
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
Т1.ВходЗону КАК ВходЗону,
МИНИМУМ(ЕстьNull(Т2.ВыходИзЗоны,ДатаВремя(3999,1,1))) КАК ВыходИзЗоны,
ИСТИНА КАК НаМаршруте
ПОМЕСТИТЬ ТПериоды
ИЗ
Т1 КАК Т1
ЛЕВОЕ СОЕДИНЕНИЕ Т1 КАК Т2
ПО Т1.ВходЗону<=Т2.ВыходИзЗоны
И Т2.КонечнаяТочка
ГДЕ
Т1.НачальнаяТочка
СГРУППИРОВАТЬ ПО
Т1.ВходЗону
;
//////////////////////////////////////////////////////////// ////////////////////////
ВЫБРАТЬ
Т1.ВходЗону КАК ВходЗону,
Т1.ВыходИзЗоны КАК ВыходИзЗоны,
Т1.ТС КАК ТС,
Т1.Зона КАК Зона,
Т1.НачальнаяТочка КАК НачальнаяТочка,
Т1.КонечнаяТочка КАК КонечнаяТочка,
ВЫБОР
КОГДА ЕСТЬNULL(ТПериоды.НаМаршруте, ЛОЖЬ) = ИСТИНА
ТОГДА "На маршруте"
ИНАЧЕ "Вне Маршрута"
КОНЕЦ КАК Поле1
ИЗ
Т1 КАК Т1
ЛЕВОЕ СОЕДИНЕНИЕ ТПериоды КАК ТПериоды
ПО Т1.ВходЗону >= ТПериоды.ВходЗону
И Т1.ВыходИзЗоны <= ТПериоды.ВыходИзЗоны
УПОРЯДОЧИТЬ ПО
ВходЗону
Показать
(4) Если в таблице 100 записей? 100 раз объединять будите?
Да Вы что, прекратите) Во временную таблицу ТочкуВхода киньте время начала точки входа "Начальная точка = истина"
Во вторую таблицу ТочкуВыхода киньте время начала точки выхода "Конечная точка = истина"
А в след таблицу все что между временем входа и выхода, включая время входа и выхода.
Да Вы что, прекратите) Во временную таблицу ТочкуВхода киньте время начала точки входа "Начальная точка = истина"
Во вторую таблицу ТочкуВыхода киньте время начала точки выхода "Конечная точка = истина"
А в след таблицу все что между временем входа и выхода, включая время входа и выхода.
(1) как вариант:
ВЫБРАТЬ
ВложенныйЗапрос.ВходЗону КАК ВходЗону,
ВложенныйЗапрос.ВыходИзЗоны КАК ВыходИзЗоны,
ВложенныйЗапрос.ТС КАК ТС,
ВложенныйЗапрос.Зона КАК Зона,
ВложенныйЗапрос.НачальнаяТочка КАК НачальнаяТочка,
ВложенныйЗапрос.КонечнаяТочка КАК КонечнаяТочка,
ВЫБОР
КОГДА ВложенныйЗапрос.НачальнаяТочка
ТОГДА ВложенныйЗапрос.ВходЗону
ИНАЧЕ NULL
КОНЕЦ КАК НачалоМаршрута,
ВЫБОР
КОГДА ВложенныйЗапрос.КонечнаяТочка
ТОГДА ВложенныйЗапрос.ВыходИзЗоны
ИНАЧЕ NULL
КОНЕЦ КАК ОкончаниеМаршрута
ПОМЕСТИТЬ вт_данные
ИЗ
(ВЫБРАТЬ
ДАТАВРЕМЯ(2019, 5, 10, 2, 6, 49) КАК ВходЗону,
ДАТАВРЕМЯ(2019, 5, 10, 2, 41, 4) КАК ВыходИзЗоны,
"К358ЕС" КАК ТС,
"Дорога Восточная" КАК Зона,
ЛОЖЬ КАК НачальнаяТочка,
ЛОЖЬ КАК КонечнаяТочка
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
ДАТАВРЕМЯ(2019, 5, 10, 2, 6, 49),
ДАТАВРЕМЯ(2019, 5, 10, 2, 41, 4),
"К358ЕС",
"Дорога Колывановская",
ЛОЖЬ,
ЛОЖЬ
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
ДАТАВРЕМЯ(2019, 5, 10, 2, 41, 4),
ДАТАВРЕМЯ(2019, 5, 10, 3, 52, 45),
"К358ЕС",
"Разрез Восточный",
ИСТИНА,
ЛОЖЬ
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
ДАТАВРЕМЯ(2019, 5, 10, 3, 52, 45),
ДАТАВРЕМЯ(2019, 5, 10, 4, 30, 30),
"К358ЕС",
"Дорога Колывановская",
ЛОЖЬ,
ЛОЖЬ
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
ДАТАВРЕМЯ(2019, 5, 10, 3, 52, 45),
ДАТАВРЕМЯ(2019, 5, 10, 4, 30, 30),
"К358ЕС",
"Дорога Восточная",
ЛОЖЬ,
ЛОЖЬ
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
ДАТАВРЕМЯ(2019, 5, 10, 4, 30, 30),
ДАТАВРЕМЯ(2019, 5, 10, 4, 45, 23),
"К358ЕС",
"Склад",
ЛОЖЬ,
ИСТИНА
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
ДАТАВРЕМЯ(2019, 5, 10, 4, 37, 0),
ДАТАВРЕМЯ(2019, 5, 10, 4, 45, 1),
"К358ЕС",
"Весы",
ЛОЖЬ,
ЛОЖЬ
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
ДАТАВРЕМЯ(2019, 5, 10, 4, 45, 23),
ДАТАВРЕМЯ(2019, 5, 10, 4, 45, 1),
"К358ЕС",
"Дорога Восточная",
ЛОЖЬ,
ЛОЖЬ
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
ДАТАВРЕМЯ(2019, 5, 10, 4, 45, 23),
ДАТАВРЕМЯ(2019, 5, 10, 4, 45, 1),
"К358ЕС",
"Дорога Колывановская",
ЛОЖЬ,
ЛОЖЬ) КАК ВложенныйЗапрос
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
МАКСИМУМ(вт_данные.НачалоМаршрута) КАК НачалоМаршрута,
МАКСИМУМ(вт_данные.ОкончаниеМаршрута) КАК ОкончаниеМаршрута
ПОМЕСТИТЬ вт_периодыМаршрута
ИЗ
вт_данные КАК вт_данные
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
вт_данные.ВходЗону КАК ВходЗону,
вт_данные.ВыходИзЗоны КАК ВыходИзЗоны,
вт_данные.ТС КАК ТС,
вт_данные.Зона КАК Зона,
вт_данные.НачальнаяТочка КАК НачальнаяТочка,
вт_данные.КонечнаяТочка КАК КонечнаяТочка,
ВЫБОР
КОГДА вт_данные.ВходЗону >= вт_периодыМаршрута.НачалоМаршрута
И вт_данные.ВыходИзЗоны <= вт_периодыМаршрута.ОкончаниеМаршрута
ТОГДА "На маршруте"
ИНАЧЕ "Вне маршрута"
КОНЕЦ КАК Статус
ИЗ
вт_данные КАК вт_данные,
вт_периодыМаршрута КАК вт_периодыМаршрута
Показать
Вакансии
Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)