Имя: Пароль:
1C
1С v8
Оставить в таблице строки с максимальной датой
0 Владимир1С
 
27.06.25
18:13
Здравствуйте!
Есть таблица , Инн , Сотрудник , Дата.
Сотрудников на один ИНН может быть несколько.
Нужно получить таблицу , в которой для одного ИНН остаётся одна строка с одним сотрудником с максимальной датой.
Этот запрос выдаёт всех сотрудников со всеми датами.
Какие есть способы? Рекурсивный запрос?

ВЫБРАТЬ
    ВТ_пред_1.Сотрудник КАК Сотрудник,
    МАКСИМУМ(ВТ_пред_1.ДатаОкончания) КАК ДатаОкончания,
    ВТ_пред_1.ФизическоеЛицоИНН КАК ФизическоеЛицоИНН
ИЗ
    ВТ_пред_1 КАК ВТ_пред_1

СГРУППИРОВАТЬ ПО
    ВТ_пред_1.Сотрудник,
    ВТ_пред_1.ФизическоеЛицоИНН

УПОРЯДОЧИТЬ ПО
    ВТ_пред_1.Сотрудник.Наименование,
    ДатаОкончания
1 arsik
 
гуру
27.06.25
18:24
2 варианта
Но может быть коллизия, если на одну дату будет 2 сотрудника с одним ИНН, тогда возможно просто сгруппировать результат с сотрудником по максимум.
ВЫБРАТЬ
	ВЫРАЗИТЬ(ТЗ.Сотрудник КАК Справочник.Сотрудники) КАК Сотрудник,
	ВЫРАЗИТЬ(ТЗ.ИНН КАК СТРОКА(12)) КАК ИНН,
	ВЫРАЗИТЬ(ТЗ.Дата КАК ДАТА) КАК Дата
ПОМЕСТИТЬ вт
ИЗ
	&ТЗ КАК ТЗ
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
	вт.ИНН КАК ИНН,
	МАКСИМУМ(вт.Дата) КАК Дата
ПОМЕСТИТЬ втМаксимумДата
ИЗ
	вт КАК вт

СГРУППИРОВАТЬ ПО
	вт.ИНН
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
	вт.Сотрудник КАК Сотрудник,
	вт.ИНН КАК ИНН,
	вт.Дата КАК Дата
ИЗ
	втМаксимумДата КАК втМаксимумДата
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ вт КАК вт
		ПО втМаксимумДата.ИНН = вт.ИНН
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
	вт.Сотрудник КАК Сотрудник,
	вт.ИНН КАК ИНН,
	вт.Дата КАК Дата
ИЗ
	вт КАК вт
ГДЕ
	(вт.ИНН, вт.Дата) В
			(ВЫБРАТЬ
				втМаксимумДата.ИНН КАК ИНН,
				втМаксимумДата.Дата КАК Дата
			ИЗ
				втМаксимумДата КАК втМаксимумДата)
2 Владимир1С
 
27.06.25
18:26
(2)Благодарю!