Сделать оптимальный запрос: левое соединение только одного значения ближайшее к дате

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

Читают тему

(гостей: 2)

Быстрый переход