Гость
Форумы / [игнор отключен] [закрыт для гостей] / Запрос с левым соединением / 25 сообщений из 27, страница 1 из 2
22.01.2009, 13:01
    #35771650
max_nl
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с левым соединением
Добрый день! Может кто подскажет с запросом?

Есть кадродые премещения сотрудников. Нужно узнать предыдущее подразделение сотрудника.
Если в запрос передавать параметр &Период , то он формируется нормально. А как можно обойтись без него, чтобы использовать СКД.

Как соединить таблицу последних движений с таблицей кадровых перемещений, где РаботникиОрганизаций.Период < КадровоеПеремещение.ДатаНачала?



ВЫБРАТЬ
КадровоеПеремещение.Ссылка,
КадровоеПеремещение.Сотрудник,
КадровоеПеремещение.ДатаНачала,
ВложенныйЗапрос.Период
ИЗ
Документ.КадровоеПеремещениеОрганизаций.РаботникиОрганизации КАК КадровоеПеремещение
ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
РаботникиОрганизаций.Сотрудник КАК Сотрудник,
МАКСИМУМ(РаботникиОрганизаций.Период) КАК Период
ИЗ
РегистрСведений.РаботникиОрганизаций КАК РаботникиОрганизаций
ГДЕ
РаботникиОрганизаций.Период < &Период

СГРУППИРОВАТЬ ПО
РаботникиОрганизаций.Сотрудник) КАК ВложенныйЗапрос
ПО КадровоеПеремещение.Сотрудник = ВложенныйЗапрос.Сотрудник
ГДЕ
КадровоеПеремещение.ДатаНачала МЕЖДУ &НачалоПериода И &КонецПериода
...
Рейтинг: 0 / 0
22.01.2009, 16:05
    #35772105
XenoX
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с левым соединением
Предпоследнее вообще за весь период или на определенную дату?
...
Рейтинг: 0 / 0
22.01.2009, 16:58
    #35772259
max_nl
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с левым соединением
нужно предпоследнее за период
...
Рейтинг: 0 / 0
22.01.2009, 17:06
    #35772284
XenoX
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с левым соединением
Тогда у вас немного не вяжется логически.
Вы накладываете ограничение на выборку документов, но при этом вам необходимо наложить ограничение на выборку из регистра и ограничение выборки из регистра = конечной дате ограничения выборки документов, иначе у вас выберется не совсем то что нужно...

Боюсь что одним запросом сделать это у вас в любом случае не получится. Придется кроме запроса написать небольшой код.
...
Рейтинг: 0 / 0
22.01.2009, 17:14
    #35772299
max_nl
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с левым соединением
Можно код писать и передавать параметр &Период.

Но мне нужно получить выборку только запросом.
Может вложенный запрос по движениям как-то связать по периодам?
...
Рейтинг: 0 / 0
22.01.2009, 17:19
    #35772315
leaf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с левым соединением
еще есть вирт таблица срез последних
...
Рейтинг: 0 / 0
22.01.2009, 17:22
    #35772330
XenoX
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с левым соединением
leafеще есть вирт таблица срез последних
Тут записи нужны именно
...
Рейтинг: 0 / 0
22.01.2009, 17:23
    #35772334
max_nl
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с левым соединением
в срезпоследних период тоже нельзя передать

Левое соединение РегистрСведений.РаботникиОрганизацийСрезПоследних(ДобавитьКДате(ДатаНачала, День, -1),)


как сделать не знаю
...
Рейтинг: 0 / 0
22.01.2009, 17:27
    #35772345
XenoX
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с левым соединением
max_nlМожно код писать и передавать параметр &Период.
Вы видимо меня не поняли
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
РаботникиОрганизаций.Сотрудник КАК Сотрудник,
МАКСИМУМ(РаботникиОрганизаций.Период) КАК Период
ИЗ
РегистрСведений.РаботникиОрганизаций КАК РаботникиОрганизаций
ГДЕ
РаботникиОрганизаций.Период < &КонецПериода

СГРУППИРОВАТЬ ПО
РаботникиОрганизаций.Сотрудник) КАК ВложенныйЗапрос

max_nlМожет вложенный запрос по движениям как-то связать по периодам?
У регистров сведений нет движений, вам необходимо выбрать предпоследнюю запись из регистра с ограничением по сотруднику и периоду, язык запросов в отличии от T-SQL не может в подзапросы в качестве параметров передавать значения строк основной выборки.

max_nlНо мне нужно получить выборку только запросом.
С чем связано такое требование.

Возможно получится сделать это через менеджер ВТ надо попробовать так на вскидку не скажу
...
Рейтинг: 0 / 0
22.01.2009, 17:34
    #35772363
XenoX
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с левым соединением
О, есть опеделеного рода идея, я ее проверю!
...
Рейтинг: 0 / 0
22.01.2009, 17:37
    #35772380
max_nl
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с левым соединением
///Может вложенный запрос по движениям как-то связать по периодам?

имею ввиду движения работника (прием, перемещение, увольнение)
Эти движения хранятся в периоддическом регистре "Работники организаций"
...
Рейтинг: 0 / 0
22.01.2009, 17:40
    #35772386
max_nl
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с левым соединением
А одним запросом нужно для схемы компоновки данных.
к этой выборке будет еще много других соединений. Но сейчас главная проблема с выбором даты предыдущего состояния работника
...
Рейтинг: 0 / 0
22.01.2009, 17:48
    #35772412
XenoX
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с левым соединением
max_nlА одним запросом нужно для схемы компоновки данных.
к этой выборке будет еще много других соединений. Но сейчас главная проблема с выбором даты предыдущего состояния работника

Да должно получиться одинм запросом и без менеджера вт.
Запрос сейчас написать не успею, да и ЗуПа под рукой нет.
Если до завтра подождете, то начеркаю запросец
...
Рейтинг: 0 / 0
22.01.2009, 17:49
    #35772419
max_nl
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с левым соединением
большое спасибо
...
Рейтинг: 0 / 0
23.01.2009, 09:12
    #35773025
XenoX
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с левым соединением
Итак вот сей запрос:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
ВЫБРАТЬ
	ПРЕДСТАВЛЕНИЕ(ОсновнойЗапрос.Регистратор) КАК ДокументИзменения,
	МАКСИМУМ(ОсновнойЗапрос.Период) КАК МаксПериод,
	ПРЕДСТАВЛЕНИЕ(ОсновнойЗапрос.Организация) КАК Организация,
	ПРЕДСТАВЛЕНИЕ(ОсновнойЗапрос.Сотрудник) КАК ФИОСотрудника, 
	ПРЕДСТАВЛЕНИЕ(ОсновнойЗапрос.ПодразделениеОрганизации) КАК Подразделение,
	ПРЕДСТАВЛЕНИЕ(ОсновнойЗапрос.Должность) КАК Должность,
	ПРЕДСТАВЛЕНИЕ(ОсновнойЗапрос.ГрафикРаботы) КАК ГрафикРаботы,
	ПРЕДСТАВЛЕНИЕ(ОсновнойЗапрос.ПричинаИзмененияСостояния) КАК ПричинаИзмененияСостояния
ИЗ 
	РегистрСведений.РаботникиОрганизаций КАК ОсновнойЗапрос
ВНУТРЕННЕЕ СОЕДИНЕНИЕ
	(
		ВЫБРАТЬ
			Сотрудник,
			МАКСИМУМ(Период) КАК МаксПериод
		ИЗ
			РегистрСведений.РаботникиОрганизаций
		СГРУППИРОВАТЬ ПО
			Сотрудник
	) КАК ВложеныйЗапрос
	ПО ВложеныйЗапрос.Сотрудник = ОсновнойЗапрос.Сотрудник
	 И ОсновнойЗапрос.Период < ВложеныйЗапрос.МаксПериод

СГРУППИРОВАТЬ ПО 
	ОсновнойЗапрос.Регистратор,
	ОсновнойЗапрос.Организация,
	ОсновнойЗапрос.Сотрудник, 
	ОсновнойЗапрос.ПодразделениеОрганизации,
	ОсновнойЗапрос.Должность,
	ОсновнойЗапрос.ГрафикРаботы,
	ОсновнойЗапрос.ПричинаИзмененияСостояния
Этим запросом можно получить предпоследнне состояние работника из регистра. Но если по работнику есть только одна запись, то в результаты он не попадет.
Можно по вкусу ддобавить параметров для ограничения верхней границы выборки по периоду.
А так уже дело ваше, как вы это дело будете использовать.
С вас сосуд с булькающим :)
...
Рейтинг: 0 / 0
23.01.2009, 12:04
    #35773430
max_nl
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с левым соединением
В том и дело, что нужно получить все перемещения сотрудника (ДатаТекущегоПеремещения и ДатаПредыдущегоПеремещения)
...
Рейтинг: 0 / 0
23.01.2009, 12:06
    #35773441
XenoX
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с левым соединением
max_nlВ том и дело, что нужно получить все перемещения сотрудника (ДатаТекущегоПеремещения и ДатаПредыдущегоПеремещения)
Ну так а в чем проблема то? :-)

Или вы ждете что за вас весь запрос напишут а потом копи паст и зарплату считать?
...
Рейтинг: 0 / 0
23.01.2009, 13:16
    #35773648
max_nl
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с левым соединением
Ваш запрос делает выборку перыдущих дат

А как таблицу перемещений связать с этим запросом, чтобы в результате были строки перемещений с датой предыдущего состояния.

Я пробовал вчера такой запрос



ВЫБРАТЬ
КадровоеПеремещение.Ссылка,
КадровоеПеремещение.Сотрудник,
КадровоеПеремещение.ДатаНачала КАК ДатаПеремещения,
ВложенныйЗапрос.Период КАК ПериодДо
ИЗ
Документ.КадровоеПеремещениеОрганизаций.РаботникиОрганизации КАК КадровоеПеремещение
ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
ДвиженияРаботника.Регистратор КАК Регистратор,
МАКСИМУМ(ДвиженияРаботника.Период) КАК Период,
ДвиженияРаботника.Сотрудник КАК Сотрудник
ИЗ
РегистрСведений.РаботникиОрганизаций КАК ДвиженияРаботника
ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
Работники.Сотрудник КАК Сотрудник,
МАКСИМУМ(Работники.Период) КАК Период
ИЗ
РегистрСведений.РаботникиОрганизаций КАК Работники

СГРУППИРОВАТЬ ПО
Работники.Сотрудник) КАК Периоды
ПО (Периоды.Сотрудник = ДвиженияРаботника.Сотрудник)
И (Периоды.Период > ДвиженияРаботника.Период)

СГРУППИРОВАТЬ ПО
ДвиженияРаботника.Регистратор,
ДвиженияРаботника.Сотрудник) КАК ВложенныйЗапрос
ПО КадровоеПеремещение.Сотрудник = ВложенныйЗапрос.Сотрудник
ГДЕ
КадровоеПеремещение.ДатаНачала МЕЖДУ &НачалоПериода И &КонецПериода
И КадровоеПеремещение.ДатаНачала > ВложенныйЗапрос.Период



Но он возвращает несколько предыдущих дат на одно перемещение
...
Рейтинг: 0 / 0
23.01.2009, 13:58
    #35773817
XenoX
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с левым соединением
А вы про "Регистратор" не в курсе в регистре РаботникиОрганизаций
...
Рейтинг: 0 / 0
23.01.2009, 14:45
    #35773977
max_nl
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с левым соединением
А что регистратор?
...
Рейтинг: 0 / 0
23.01.2009, 17:06
    #35774449
XenoX
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с левым соединением
Вы видимо так и не поняли основную идею...
...
Рейтинг: 0 / 0
26.01.2009, 11:18
    #35776925
max_nl
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с левым соединением
Разобрался с запросом.
Вот запрос, который получает предпоследнее место и дату сотрудника

ВЫБРАТЬ
Работники.Период,
Работники.Сотрудник,
МАКСИМУМ(РаботникиСрез.Период) КАК Период1
ИЗ
РегистрСведений.РаботникиОрганизаций КАК Работники
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.РаботникиОрганизаций КАК РаботникиСрез
ПО Работники.Сотрудник = РаботникиСрез.Сотрудник
И Работники.Период > РаботникиСрез.Период
ГДЕ
Работники.Период МЕЖДУ &НачалоПериода И &КонецПериода

СГРУППИРОВАТЬ ПО
Работники.Период,
Работники.Сотрудник
...
Рейтинг: 0 / 0
26.01.2009, 12:31
    #35777175
johnn06
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с левым соединением
XenoX,


язык запросов в отличии от T-SQL не может в подзапросы в качестве параметров передавать значения строк основной выборки.


Можете доказать?!
...
Рейтинг: 0 / 0
26.01.2009, 13:39
    #35777432
RMih
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с левым соединением
johnn06XenoX,


язык запросов в отличии от T-SQL не может в подзапросы в качестве параметров передавать значения строк основной выборки.


Можете доказать?!

МОЖЕТ!!!

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
ВЫБРАТЬ
	Выписка.Дата,
	Выписка.Валюта,
	ВалютыКурс.Курс
ИЗ
	Документ.Выписка КАК Выписка
	ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ВалютыКурс КАК ВалютыКурс
	ПО Выписка.Валюта = ВалютыКурс.Валюта
	И ВалютыКурс.Период В
		(ВЫБРАТЬ
			МАКСИМУМ(Период)
		ИЗ
			РегистрСведений.ВалютыКурс
		ГДЕ
			Валюта = Выписка.Валюта
			И Период <= Выписка.Дата
		)
...
Рейтинг: 0 / 0
26.01.2009, 14:24
    #35777598
johnn06
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с левым соединением
RMihjohnn06XenoX,


язык запросов в отличии от T-SQL не может в подзапросы в качестве параметров передавать значения строк основной выборки.


Можете доказать?!

МОЖЕТ!!!

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
ВЫБРАТЬ
	Выписка.Дата,
	Выписка.Валюта,
	ВалютыКурс.Курс
ИЗ
	Документ.Выписка КАК Выписка
	ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ВалютыКурс КАК ВалютыКурс
	ПО Выписка.Валюта = ВалютыКурс.Валюта
	И ВалютыКурс.Период В
		(ВЫБРАТЬ
			МАКСИМУМ(Период)
		ИЗ
			РегистрСведений.ВалютыКурс
		ГДЕ
			Валюта = Выписка.Валюта
			И Период <= Выписка.Дата
		)


Все правильно! а теперь можете превести скрипт на T-SQL, где в подзапросе справа от inner join используется записи выборки, стоящей слева от inner join, по сути транслировать этот запрос в T-SQL, чтобы он работал. интерсено посмотреть просто...
...
Рейтинг: 0 / 0
Форумы / [игнор отключен] [закрыт для гостей] / Запрос с левым соединением / 25 сообщений из 27, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]