|
Как получить данную выборку из непериодического регистра сведений | ☑ | ||
---|---|---|---|---|
0
falselight
06.02.18
✎
14:28
|
Есть непериодический регистр сведений "Состояния сотрудников", который имеет измерения "Сотрудник", "Период", и ресурс "Состояние".
Данные в нем заполнены не на каждый день. Например: Иванов 01.01.2013 Работает Петров 05.01.2013 В_Отпуске Иванов 09.01.2013 Болеет Петров 12.01.2013 Работает Иванов 13.01.2013 Работает Необходимо написать текст запроса, который выдавал бы актуальные состояния сотрудников на заданную дату &Дата. Например, на 12.01.2013 Результат запрос должен быть: Иванов Болеет Петров Работает |
|||
1
azernot
06.02.18
✎
14:31
|
Выбираешь из регистра сотрудников с периодом <= заданного, группируешь по сотруднику с максимумом по периоду, соединяешь с регистром по равенству сотрудника и максимального периода, получаешь состояние сотрудника на нужную дату.
|
|||
2
VitShvets
06.02.18
✎
14:34
|
Вложенными или пакетными запросами:
1. Поучаешь выборку максимальных дат: ВЫБРАТЬ Сотрудник, МАКСИМУМ(Период) поместить ВТ1 ИЗ Регистр ГДЕ Период <= &Дата 2. Получаешь нужное Выбрать Регистр.Сотрудник, Регистр.Состояние из Регистр Внутреннее соединение ВТ1 ПО период=период и сотрудник = сотрудник. (1) :) Опередил, но коль уж набрал, то продублирую. |
|||
3
falselight
06.02.18
✎
14:35
|
(1,2) Регистр один непериодический регистр сведений "Состояния сотрудников".
Что у вас участвует в связях? |
|||
4
azernot
06.02.18
✎
14:39
|
(3) По сути в связях участвуют данные из одного и того же регистра. Можно через ВТ, можно через двойное обращение к таблице регистра.
|
|||
5
falselight
06.02.18
✎
14:40
|
ВЫБРАТЬ РАЗРЕШЕННЫЕ
СостоянияСотрудников.Сотрудник КАК Сотрудник, МАКСИМУМ(СостоянияСотрудников.ПериодРаботы) КАК ПериодРаботы ПОМЕСТИТЬ ВТ_МаксимальныеДаты ИЗ РегистрСведений.СостоянияСотрудников КАК СостоянияСотрудников ГДЕ СостоянияСотрудников.ПериодРаботы <= &ПараметрДата СГРУППИРОВАТЬ ПО СостоянияСотрудников.Сотрудник ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ СостоянияСотрудников.Сотрудник КАК Сотрудник, СостоянияСотрудников.Состояние КАК Состояние ИЗ РегистрСведений.СостоянияСотрудников КАК СостоянияСотрудников ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_МаксимальныеДаты КАК ВТ_МаксимальныеДаты ПО СостоянияСотрудников.Сотрудник = ВТ_МаксимальныеДаты.Сотрудник И СостоянияСотрудников.ПериодРаботы = ВТ_МаксимальныеДаты.ПериодРаботы |
|||
6
azernot
06.02.18
✎
14:42
|
ВЫБРАТЬ
СостоянияСотрудников.Сотрудник КАК Сотрудник, СостоянияСотрудников.Период КАК Период, СостоянияСотрудников.Состояние ПОМЕСТИТЬ ДанныеРегистра ИЗ РегистрСведений.СостоянияСотрудников КАК СостоянияСотрудников ГДЕ СостоянияСотрудников.Период <= &ДатаСостояния ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ДанныеРегистра.Сотрудник, ДанныеРегистра.Состояние ИЗ (ВЫБРАТЬ ДанныеРегистра.Сотрудник КАК Сотрудник, МАКСИМУМ(ДанныеРегистра.Период) КАК Период ИЗ ДанныеРегистра КАК ДанныеРегистра СГРУППИРОВАТЬ ПО ДанныеРегистра.Сотрудник) КАК МаксимальныеПериоды ВНУТРЕННЕЕ СОЕДИНЕНИЕ ДанныеРегистра КАК ДанныеРегистра ПО МаксимальныеПериоды.Сотрудник = ДанныеРегистра.Сотрудник И МаксимальныеПериоды.Период = ДанныеРегистра.Период |
|||
7
falselight
06.02.18
✎
15:04
|
В (5) работает, лишнее только РАЗРЕШЕННЫЕ, убрал.
В (6) практически тоже самое только с вложенным запросом хитро закручено. Понять остается. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |