Сделать оптимальный запрос: левое соединение только одного значения ближайшее к дате
11.12.2012
15:43
#1
Вопрос к знатокам запросов.<br> <br>Есть запрос, который к ОсновнойРегистрСведений должен добавить данные из ДанныеРегистра при совпадении поля Сотрудник<br>Но добавить только одно ближайшее к ДатаДействия значение.<br><br>Не соображу как оптимальнее выбрать только ОДНО значение из регистра. <br>В примере ниже у меня добавляются все записи регистра ДанныеРегистра, если ДанныеРегистра.Дата <= ОсновнойРегистрСведений.ДатаДействия<br><br>ВЫБРАТЬ<br> ДанныеРегистра.Сотрудник,<br> ДанныеРегистра.Дата,<br> ДанныеРегистра.Значение,<br> ОсновнойРегистрСведений.Сотрудник КАК Сотрудник1,<br> ОсновнойРегистрСведений.ДатаДействия КАК Дата1<br>ИЗ<br> ОсновнойРегистрСведений КАК ОсновнойРегистрСведений<br> ЛЕВОЕ СОЕДИНЕНИЕ ДанныеРегистра КАК ДанныеРегистра<br> ПО ОсновнойРегистрСведений.Сотрудник = ДанныеРегистра.Сотрудник<br> И (ДанныеРегистра.Дата <= ОсновнойРегистрСведений.ДатаДействия )
11.12.2012
15:47
#3
Это как?<br>Я срезаю на ОсновнойРегистрСведений.ДатаДействия, а она всегда разная.<br>Я не знаю как в параметры добавить данные из другой таблицы (((((
11.12.2012
16:05
#4
В 2 пакета надо делать.<br><br> - Определяешь самую раннюю или самую позднюю дату по сотруднику (функции минимум и максимум в группировке).<br> - Соединяешь с данными через связь максимальной (или минимальной даты) с датой данных.
11.12.2012
16:10
#5
> - Определяешь самую раннюю или самую позднюю дату по сотруднику (функции минимум и максимум в группировке).<br>Теоретически могут быть три даты на одного сотрудника. Как быть со средней датой тогда?<br> <br><br>> - Соединяешь с данными через связь максимальной (или минимальной даты) с датой данных.<br>А тут не понятно условие связи (((
11.12.2012
17:43
#6
У тебя есть выборка<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>Вот вроде бы на пальцах расписал. Если и сейчас не понятно, то давай выкладывай структуру регистров и четкое описание задачи.
12.12.2012
07:59
#7
По одному сотруднику это понятно, а когда много сотрудников?<br><br>> группируешь и получаешь<br>> <br>> Сотрудник | ДатаДействия | МинДата<br> <br>Как сгруппировать и получить МинДата у каждого сотрудника?
12.12.2012
08:05
#8
"Вот запрос, которые можно допилить (состоит из временных таблиц):<br> <br>ВЫБРАТЬ<br> ДанныеРегистра.Сотрудник,<br> ДанныеРегистра.Дата,<br> ДанныеРегистра.Значение<br>ПОМЕСТИТЬ ВТ_ДанныеРегистра<br>ИЗ<br> ДанныеРегистра КАК ДанныеРегистра<br>;<br><br>////////////////////////////////////////////////////////////////////////////////<br>ВЫБРАТЬ<br> ОсновнойРегистрСведений.Сотрудник КАК Сотрудник1,<br> ОсновнойРегистрСведений.ДатаДействия КАК Дата1<br>ПОМЕСТИТЬ ВТ_ОсновнойРегистр<br>ИЗ<br> ОсновнойРегистрСведений КАК ОсновнойРегистрСведений"
Читают тему
(гостей: 2)