Непериодические регистры с датами в запросе
Здравствуйте!
Подскажите, пожалуйста, у кого есть опыт.
Есть два непериодических регистра, где:
Регистр1 = с одним измерением и одним ресурсом, где дата как ресурс.
Регистр2 = с двумя измерениями, где оба (в т.ч дата) как измерение.
Допустим
в Регистре1 указана дата 27.02.2024
в Регистре2 указаны даты 05.03.2021 и 15.10.2022
Возможно ли создать запрос с условием, допустим Регистре1 >= Регистре2 (или по-другому), чтобы для 27.02.2024 подтягивалась дата именно 15.10.2022 ?
Подскажите, пожалуйста, у кого есть опыт.
Есть два непериодических регистра, где:
Регистр1 = с одним измерением и одним ресурсом, где дата как ресурс.
Регистр2 = с двумя измерениями, где оба (в т.ч дата) как измерение.
Допустим
в Регистре1 указана дата 27.02.2024
в Регистре2 указаны даты 05.03.2021 и 15.10.2022
Возможно ли создать запрос с условием, допустим Регистре1 >= Регистре2 (или по-другому), чтобы для 27.02.2024 подтягивалась дата именно 15.10.2022 ?
По теме из базы знаний
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1) Ну то есть по условию подтягивалась максимальная дата?
Это же классическая задача, даже "каноническая".
Виртуалка 1
К первой таблице (Регистр 1) левым присоединяете нужные поля Регистра 2 с условием соединения, что
Дата в Регистре 1 >= Даты(х) в Регистре 2
И обязательно в т.ч. та самая Дата(х)
Виртуалка 2
Из виртуалки 1 выбираете данные, которые будут уникальными в отдельно строке выборки, в т.ч. Дата(х).
Группируете данные по всем полям, а Дата(х) по функции "Максимум".
Виртуалка 3.
В ней внутренним соединяете Виртуалку 1 и Виртуалку 2 по уникальным полям, включая Датат(х).
Всё
Это же классическая задача, даже "каноническая".
Виртуалка 1
К первой таблице (Регистр 1) левым присоединяете нужные поля Регистра 2 с условием соединения, что
Дата в Регистре 1 >= Даты(х) в Регистре 2
И обязательно в т.ч. та самая Дата(х)
Виртуалка 2
Из виртуалки 1 выбираете данные, которые будут уникальными в отдельно строке выборки, в т.ч. Дата(х).
Группируете данные по всем полям, а Дата(х) по функции "Максимум".
Виртуалка 3.
В ней внутренним соединяете Виртуалку 1 и Виртуалку 2 по уникальным полям, включая Датат(х).
Всё
(2)Спасибо за ответ. Просто недавно изучаю.
Виртуалка имеется ввиду временные таблицы?
Если правильно всё сделал то опять загружается все что есть а не самая ближайшая дата
Виртуалка имеется ввиду временные таблицы?
Если правильно всё сделал то опять загружается все что есть а не самая ближайшая дата
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Платформа.Название КАК Название,
| ОтветственныеЛица.ФИО КАК ФИО
|ПОМЕСТИТЬ Вт1
|ИЗ
| РегистрСведений.Платформа КАК Платформа
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ОтветственныеЛица КАК ОтветственныеЛица
| ПО Платформа.ДатаРелиза >= ОтветственныеЛица.ДатаПриема
|;
|
|//////////////////////////////////////////////////////////// ////////////////////
|ВЫБРАТЬ
| Вт1.Название КАК Название,
| Вт1.ФИО КАК ФИО,
| МАКСИМУМ(ОтветственныеЛица.ДатаПриема) КАК ДатаПриема
|ПОМЕСТИТЬ Вт2
|ИЗ
| Вт1 КАК Вт1,
| РегистрСведений.ОтветственныеЛица КАК ОтветственныеЛица
|
|СГРУППИРОВАТЬ ПО
| Вт1.Название,
| Вт1.ФИО
|;
|
|//////////////////////////////////////////////////////////// ////////////////////
|ВЫБРАТЬ
| Вт2.Название КАК Название,
| Вт2.ФИО КАК ФИО,
| Вт2.ДатаПриема КАК ДатаПриема
|ИЗ
| Вт1 КАК Вт1
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Вт2 КАК Вт2
| ПО Вт1.Название = Вт2.Название
| И Вт1.ФИО = Вт2.ФИО";
Показать
(3) Да, временные.
Лучше опишите ваши регистры и что вы хотите выбрать и как?
А пока догадываюсь, что должно быть так (писал вслепую, может и ругнуться, но главное - показываю принцип, уловите его)
Лучше опишите ваши регистры и что вы хотите выбрать и как?
А пока догадываюсь, что должно быть так (писал вслепую, может и ругнуться, но главное - показываю принцип, уловите его)
ВЫБРАТЬ
| Платформа.Название КАК Название,
| Платформа.ЧтоНибудьЕщеНужное КАК ЕщеНужное,
| ОтветственныеЛица.ФИО КАК ФИО,
| ОтветственныеЛица.ДатаПриема КАК ДатаПриема,
|ПОМЕСТИТЬ Вт1
|ИЗ
| РегистрСведений.Платформа КАК Платформа
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ОтветственныеЛица КАК ОтветственныеЛица
| ПО Платформа.ДатаРелиза >= ОтветственныеЛица.ДатаПриема
|;
|
|//////////////////////////////////////////////////////////// ////////////////////
|ВЫБРАТЬ
| Вт1.Название КАК Название,
| Вт1.ФИО КАК ФИО,
| МАКСИМУМ(Вт1.ДатаПриема) КАК ДатаПриема
|ПОМЕСТИТЬ Вт2
|ИЗ
| Вт1 КАК Вт1
|
|СГРУППИРОВАТЬ ПО
| Вт1.Название,
| Вт1.ФИО
|;
|
|//////////////////////////////////////////////////////////// ////////////////////
|ВЫБРАТЬ
| Вт1.Название КАК Название,
| Вт1.ФИО КАК ФИО,
| Вт1.ЕщеНужное КАК ЕщёНужное,
| Вт1.ДатаПриема КАК ДатаПриема
|ИЗ
| Вт1 КАК Вт1
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Вт2 КАК Вт2
| ПО Вт1.Название = Вт2.Название
| И Вт1.ФИО = Вт2.ФИО
| И Вт1.ДатаПриема= Вт2.ДатаПриема
Показать
(4) как на скриншоте.
То есть даты платформ как ресурс и есть даты приема сотрудников как измерение. Вся задача в том, что необходимо определить согласно дате платформы, кто из сотрудников работал по самой близкой дате относительно даты платформы и вывести на список с двумя колонками название платформы и ФИО сотрудника. Понимаю, что задача простая, но, к сожалению, пока не очень хорошо представляю суть временных таблиц.
То есть даты платформ как ресурс и есть даты приема сотрудников как измерение. Вся задача в том, что необходимо определить согласно дате платформы, кто из сотрудников работал по самой близкой дате относительно даты платформы и вывести на список с двумя колонками название платформы и ФИО сотрудника. Понимаю, что задача простая, но, к сожалению, пока не очень хорошо представляю суть временных таблиц.
Прикрепленные файлы:
(1) это называется "срез последних для непериодических регистров"
(3)
(3)
"ВЫБРАТЬ
| Платформа.Название КАК Название,
| МАКСИМУМ(ОтветственныеЛица.ДатаПриема) КАК ДатаПриема
|ПОМЕСТИТЬ ВтСрез
|ИЗ
| РегистрСведений.Платформа КАК Платформа
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ОтветственныеЛица КАК ОтветственныеЛица
| ПО Платформа.ДатаРелиза >= ОтветственныеЛица.ДатаПриема
|
|СГРУППИРОВАТЬ ПО
| Платформа.Название
|;
|
|//////////////////////////////////////////////////////////// ////////////////////
|ВЫБРАТЬ
| ВтСрез.Название КАК Название,
| ОтветственныеЛица.ФИО КАК ФИО,
| ОтветственныеЛица.ДатаПриема КАК ДатаПриема
|ИЗ
| ВтСрез КАК ВтСрез
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ОтветственныеЛица КАК ОтветственныеЛица
| ПО ВтСрез.ДатаПриема = ОтветственныеЛица.ДатаПриема"
Показать
(4) как на скриншоте.
То есть даты платформ как ресурс и есть даты приема сотрудников как измерение. Вся задача в том, что необходимо определить согласно дате платформы, кто из сотрудников работал по самой близкой дате относительно даты платформы и вывести на список с двумя колонками название платформы и ФИО сотрудника. Понимаю, что задача простая, но, к сожалению, пока не очень хорошо представляю суть временных таблиц.
То есть даты платформ как ресурс и есть даты приема сотрудников как измерение. Вся задача в том, что необходимо определить согласно дате платформы, кто из сотрудников работал по самой близкой дате относительно даты платформы и вывести на список с двумя колонками название платформы и ФИО сотрудника. Понимаю, что задача простая, но, к сожалению, пока не очень хорошо представляю суть временных таблиц.
Прикрепленные файлы:
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот