Вход | Регистрация


Как получить данную выборку из непериодического регистра сведений

Как получить данную выборку из непериодического регистра сведений
Я
   falselight
 
06.02.18 - 14:28
Есть непериодический регистр сведений "Состояния сотрудников", который имеет измерения "Сотрудник", "Период", и ресурс "Состояние".
Данные в нем заполнены не на каждый день.
Например:
Иванов 01.01.2013 Работает
Петров 05.01.2013 В_Отпуске
Иванов 09.01.2013 Болеет
Петров 12.01.2013 Работает
Иванов 13.01.2013 Работает

Необходимо написать текст запроса, который выдавал бы актуальные состояния сотрудников на заданную дату &Дата.
Например, на 12.01.2013 Результат запрос должен быть:

Иванов Болеет
Петров Работает
 
 
   azernot
 
1 - 06.02.18 - 14:31
Выбираешь из регистра сотрудников с периодом <= заданного, группируешь по сотруднику с максимумом по периоду, соединяешь с регистром по равенству сотрудника и максимального периода, получаешь состояние сотрудника на нужную дату.
   VitShvets
 
2 - 06.02.18 - 14:34
Вложенными или пакетными запросами:
1. Поучаешь выборку максимальных дат:
ВЫБРАТЬ Сотрудник, МАКСИМУМ(Период) поместить ВТ1 ИЗ Регистр ГДЕ Период <= &Дата
2. Получаешь нужное
Выбрать Регистр.Сотрудник, Регистр.Состояние
из Регистр Внутреннее соединение ВТ1 ПО период=период и сотрудник = сотрудник. 

(1) :) Опередил, но коль уж набрал, то продублирую.
   falselight
 
3 - 06.02.18 - 14:35
(1,2) Регистр один непериодический регистр сведений "Состояния сотрудников".

Что у вас участвует в связях?
   azernot
 
4 - 06.02.18 - 14:39
(3) По сути в связях участвуют данные из одного и того же регистра. Можно через ВТ, можно через двойное обращение к таблице регистра.
   falselight
 
5 - 06.02.18 - 14:40
ВЫБРАТЬ РАЗРЕШЕННЫЕ
    СостоянияСотрудников.Сотрудник КАК Сотрудник,
    МАКСИМУМ(СостоянияСотрудников.ПериодРаботы) КАК ПериодРаботы
ПОМЕСТИТЬ ВТ_МаксимальныеДаты
ИЗ
    РегистрСведений.СостоянияСотрудников КАК СостоянияСотрудников
ГДЕ
    СостоянияСотрудников.ПериодРаботы <= &ПараметрДата

СГРУППИРОВАТЬ ПО
    СостоянияСотрудников.Сотрудник
;

////////////////////////////////////////////////////////////////////////////////

ВЫБРАТЬ
    СостоянияСотрудников.Сотрудник КАК Сотрудник,
    СостоянияСотрудников.Состояние КАК Состояние
ИЗ
    РегистрСведений.СостоянияСотрудников КАК СостоянияСотрудников
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_МаксимальныеДаты КАК ВТ_МаксимальныеДаты
        ПО СостоянияСотрудников.Сотрудник = ВТ_МаксимальныеДаты.Сотрудник
            И СостоянияСотрудников.ПериодРаботы = ВТ_МаксимальныеДаты.ПериодРаботы
   azernot
 
6 - 06.02.18 - 14:42
ВЫБРАТЬ
    СостоянияСотрудников.Сотрудник КАК Сотрудник,
    СостоянияСотрудников.Период КАК Период,
    СостоянияСотрудников.Состояние
ПОМЕСТИТЬ ДанныеРегистра
ИЗ
    РегистрСведений.СостоянияСотрудников КАК СостоянияСотрудников
ГДЕ
    СостоянияСотрудников.Период <= &ДатаСостояния
;

////////////////////////////////////////////////////////////////////////////////

ВЫБРАТЬ
    ДанныеРегистра.Сотрудник,
    ДанныеРегистра.Состояние
ИЗ
    (ВЫБРАТЬ
        ДанныеРегистра.Сотрудник КАК Сотрудник,
        МАКСИМУМ(ДанныеРегистра.Период) КАК Период
    ИЗ
        ДанныеРегистра КАК ДанныеРегистра
    
    СГРУППИРОВАТЬ ПО
        ДанныеРегистра.Сотрудник) КАК МаксимальныеПериоды
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ ДанныеРегистра КАК ДанныеРегистра
        ПО МаксимальныеПериоды.Сотрудник = ДанныеРегистра.Сотрудник
            И МаксимальныеПериоды.Период = ДанныеРегистра.Период
   falselight
 
7 - 06.02.18 - 15:04
В (5)  работает, лишнее только РАЗРЕШЕННЫЕ, убрал.
В (6) практически тоже самое только с вложенным запросом хитро закручено. Понять остается.

Список тем форума
Рекламное место пустует  Рекламное место пустует
Программист всегда исправляет последнюю ошибку.
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует