Вложенный запрос. Как избавиться от лишних строк.

1. user866613 19.03.25 15:57 Сейчас в теме
Приветствую.
Пытаюсь получить текущий ФОТ и Тариф сотрудника.
Не могу понять как взять только последний период по каждому сотруднику.
Если по одному, то выбираем первую упорядоченную строку, а вот как сделать, чтобы в общем списке у каждого сотрудника осталась строка с наибольшим периодом, не могу сообразить.
Знающие, подскажите, пожалуйста!


ВЫБРАТЬ
	ПлановыйФОТИтогиСрезПоследних.Сотрудник КАК Сотрудник,
	ПлановыйФОТИтогиСрезПоследних.ТарифнаяСтавка КАК ТарифнаяСтавка,
	ПлановыйФОТИтогиСрезПоследних.ФОТ КАК ФОТ,
	ПлановыйФОТИтогиСрезПоследних.Надбавка КАК Надбавка,
	ПлановыйФОТИтогиСрезПоследних.Период КАК Период,
	ТекущиеКадровыеДанные.ДатаПриема
ИЗ
	РегистрСведений.ПлановыйФОТИтоги.СрезПоследних КАК ПлановыйФОТИтогиСрезПоследних
		ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
			ТекущиеКадровыеДанные.Сотрудник,
			ТекущиеКадровыеДанные.ДатаПриема КАК ДатаПриема,
			ТекущиеКадровыеДанные.ДатаУвольнения КАК ДатаУвольнения
		ИЗ
			РегистрСведений.ТекущиеКадровыеДанныеСотрудников КАК ТекущиеКадровыеДанные
		ГДЕ
			ДатаУвольнения = ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
			И ДатаПриема <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)) КАК ТекущиеКадровыеДанные
		ПО ПлановыйФОТИтогиСрезПоследних.Сотрудник = ТекущиеКадровыеДанные.Сотрудник
Показать


Сотрудник ТарифнаяСтавка ФОТ Надбавка Период ДатаПриема
Хиии Нииииии Виииииииииии 24 000 29 952,00 0 01.02.2019 0:00:20
Хиии Нииииии Виииииииииии 1 178 17 968,84 0 01.05.2019 0:01:00
Хиии Нииииии Виииииииииии 1 178 17 968,84 691,11 01.01.2020 0:00:00
Хиии Нииииии Виииииииииии 1 178 17 968,84 691,11 01.01.2020 0:01:00
Хиии Нииииии Виииииииииии 1 178 18 172,20 698,93 01.05.2020 0:01:00
Хиии Нииииии Виииииииииии 1 178 18 275,12 702,89 01.09.2020 0:01:00
Хиии Нииииии Виииииииииии 1 178 18 275,12 702,89 31.12.2020 0:00:05
Сууу Нууууууу Нуууууууууууу 1 721 26 101,23 0 06.02.2019 0:00:20
Сууу Нууууууу Нуууууууууууу 1 721 26 101,23 0 20.06.2019 0:00:05
По теме из базы знаний
Найденные решения
3. user866613 20.03.25 11:58 Сейчас в теме
(2) Да, но нет. Но таки да.

Нашёл примерно тоже самое https://forum.infostart.ru/forum9/topic218455/#message2223159
Переделал под себя. Работает.
Пытаюсь понять, зачем нужны 3 и 4 ВТ?


 ///////////////////////////////////////////////////////////////////////////////// 1 Список записей неуволенных сотрудников втСписокЗаписей
ВЫБРАТЬ
	ПлановыйФОТИтогиСрезПоследних.Сотрудник КАК Сотрудник,
	ПлановыйФОТИтогиСрезПоследних.ТарифнаяСтавка КАК ТарифнаяСтавка,
	ПлановыйФОТИтогиСрезПоследних.ФОТ КАК ФОТ,
	ПлановыйФОТИтогиСрезПоследних.Надбавка КАК Надбавка,
	ПлановыйФОТИтогиСрезПоследних.Период КАК Период,
	ТекущиеКадровыеДанные.ДатаПриема КАК ДатаПриема,
	ТекущиеКадровыеДанные.ДатаУвольнения КАК ДатаУвольнения
ПОМЕСТИТЬ втСписокЗаписей
ИЗ
	РегистрСведений.ПлановыйФОТИтоги.СрезПоследних КАК ПлановыйФОТИтогиСрезПоследних
		ПРАВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
			ТекущиеКадровыеДанные.Сотрудник,
			ТекущиеКадровыеДанные.ДатаПриема КАК ДатаПриема,
			ТекущиеКадровыеДанные.ДатаУвольнения КАК ДатаУвольнения
		ИЗ
			РегистрСведений.ТекущиеКадровыеДанныеСотрудников КАК ТекущиеКадровыеДанные
		ГДЕ
			ДатаУвольнения = ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
			И ДатаПриема <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)) КАК ТекущиеКадровыеДанные
		ПО ПлановыйФОТИтогиСрезПоследних.Сотрудник = ТекущиеКадровыеДанные.Сотрудник
//ГДЕ
//	ПлановыйФОТИтогиСрезПоследних.Сотрудник В (&Сотрудник)
;
////////////////////////////////////////////////////////////­//////////////////// 2 МАКС ДАТА по каждому сотруднику
ВЫБРАТЬ
    втСписокЗаписей.Сотрудник КАК Сотрудник,
    МАКСИМУМ(втСписокЗаписей.Период) КАК Период
ПОМЕСТИТЬ втМаксДаты
ИЗ
    втСписокЗаписей КАК втСписокЗаписей

СГРУППИРОВАТЬ ПО
    втСписокЗаписей.Сотрудник
;
////////////////////////////////////////////////////////////­//////////////////// 3
ВЫБРАТЬ
    втСписокЗаписей.Сотрудник КАК Сотрудник,
    втСписокЗаписей.Период КАК Период
ПОМЕСТИТЬ втДляВычисленияНужной
ИЗ
    втСписокЗаписей КАК втСписокЗаписей
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ втМаксДаты КАК втМаксДаты
        ПО втСписокЗаписей.Сотрудник = втМаксДаты.Сотрудник
            И втСписокЗаписей.Период = втМаксДаты.Период
;
////////////////////////////////////////////////////////////­//////////////////// 4
ВЫБРАТЬ
    втДляВычисленияНужной.Сотрудник КАК Сотрудник,
    втДляВычисленияНужной.Период КАК Период
ПОМЕСТИТЬ втНужнаяСтрока
ИЗ
    втДляВычисленияНужной КАК втДляВычисленияНужной

СГРУППИРОВАТЬ ПО
    втДляВычисленияНужной.Сотрудник,
    втДляВычисленияНужной.Период
;

////////////////////////////////////////////////////////////­//////////////////// 5
ВЫБРАТЬ
    втНужнаяСтрока.Сотрудник КАК Сотрудник,
    втНужнаяСтрока.Период КАК Период,
    втСписокЗаписей.ТарифнаяСтавка КАК ТарифнаяСтавка,
    втСписокЗаписей.ФОТ КАК ФОТ,
    втСписокЗаписей.Надбавка КАК Надбавка,
    втСписокЗаписей.ДатаПриема КАК ДатаПриема,
    втСписокЗаписей.ДатаУвольнения КАК ДатаУвольнения
    
ИЗ
    втНужнаяСтрока КАК втНужнаяСтрока
        ЛЕВОЕ СОЕДИНЕНИЕ втСписокЗаписей КАК втСписокЗаписей
        ПО (втНужнаяСтрока.Сотрудник = втСписокЗаписей.Сотрудник
        И втНужнаяСтрока.Период = втСписокЗаписей.Период
        )
Показать
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. RustamZz 19.03.25 17:03 Сейчас в теме
(1)
ВЫБРАТЬ
            ТекущиеКадровыеДанные.Сотрудник,
            МАКСИМУМ(ТекущиеКадровыеДанные.ДатаПриема) КАК ДатаПриема
ИЗ
            РегистрСведений.ТекущиеКадровыеДанныеСотрудников КАК ТекущиеКадровыеДанные
ГДЕ
            ДатаУвольнения = ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
            И ДатаПриема <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
СГРУППИРОВАТЬ ПО Сотрудник
Показать
3. user866613 20.03.25 11:58 Сейчас в теме
(2) Да, но нет. Но таки да.

Нашёл примерно тоже самое https://forum.infostart.ru/forum9/topic218455/#message2223159
Переделал под себя. Работает.
Пытаюсь понять, зачем нужны 3 и 4 ВТ?


 ///////////////////////////////////////////////////////////////////////////////// 1 Список записей неуволенных сотрудников втСписокЗаписей
ВЫБРАТЬ
	ПлановыйФОТИтогиСрезПоследних.Сотрудник КАК Сотрудник,
	ПлановыйФОТИтогиСрезПоследних.ТарифнаяСтавка КАК ТарифнаяСтавка,
	ПлановыйФОТИтогиСрезПоследних.ФОТ КАК ФОТ,
	ПлановыйФОТИтогиСрезПоследних.Надбавка КАК Надбавка,
	ПлановыйФОТИтогиСрезПоследних.Период КАК Период,
	ТекущиеКадровыеДанные.ДатаПриема КАК ДатаПриема,
	ТекущиеКадровыеДанные.ДатаУвольнения КАК ДатаУвольнения
ПОМЕСТИТЬ втСписокЗаписей
ИЗ
	РегистрСведений.ПлановыйФОТИтоги.СрезПоследних КАК ПлановыйФОТИтогиСрезПоследних
		ПРАВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
			ТекущиеКадровыеДанные.Сотрудник,
			ТекущиеКадровыеДанные.ДатаПриема КАК ДатаПриема,
			ТекущиеКадровыеДанные.ДатаУвольнения КАК ДатаУвольнения
		ИЗ
			РегистрСведений.ТекущиеКадровыеДанныеСотрудников КАК ТекущиеКадровыеДанные
		ГДЕ
			ДатаУвольнения = ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
			И ДатаПриема <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)) КАК ТекущиеКадровыеДанные
		ПО ПлановыйФОТИтогиСрезПоследних.Сотрудник = ТекущиеКадровыеДанные.Сотрудник
//ГДЕ
//	ПлановыйФОТИтогиСрезПоследних.Сотрудник В (&Сотрудник)
;
////////////////////////////////////////////////////////////­//////////////////// 2 МАКС ДАТА по каждому сотруднику
ВЫБРАТЬ
    втСписокЗаписей.Сотрудник КАК Сотрудник,
    МАКСИМУМ(втСписокЗаписей.Период) КАК Период
ПОМЕСТИТЬ втМаксДаты
ИЗ
    втСписокЗаписей КАК втСписокЗаписей

СГРУППИРОВАТЬ ПО
    втСписокЗаписей.Сотрудник
;
////////////////////////////////////////////////////////////­//////////////////// 3
ВЫБРАТЬ
    втСписокЗаписей.Сотрудник КАК Сотрудник,
    втСписокЗаписей.Период КАК Период
ПОМЕСТИТЬ втДляВычисленияНужной
ИЗ
    втСписокЗаписей КАК втСписокЗаписей
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ втМаксДаты КАК втМаксДаты
        ПО втСписокЗаписей.Сотрудник = втМаксДаты.Сотрудник
            И втСписокЗаписей.Период = втМаксДаты.Период
;
////////////////////////////////////////////////////////////­//////////////////// 4
ВЫБРАТЬ
    втДляВычисленияНужной.Сотрудник КАК Сотрудник,
    втДляВычисленияНужной.Период КАК Период
ПОМЕСТИТЬ втНужнаяСтрока
ИЗ
    втДляВычисленияНужной КАК втДляВычисленияНужной

СГРУППИРОВАТЬ ПО
    втДляВычисленияНужной.Сотрудник,
    втДляВычисленияНужной.Период
;

////////////////////////////////////////////////////////////­//////////////////// 5
ВЫБРАТЬ
    втНужнаяСтрока.Сотрудник КАК Сотрудник,
    втНужнаяСтрока.Период КАК Период,
    втСписокЗаписей.ТарифнаяСтавка КАК ТарифнаяСтавка,
    втСписокЗаписей.ФОТ КАК ФОТ,
    втСписокЗаписей.Надбавка КАК Надбавка,
    втСписокЗаписей.ДатаПриема КАК ДатаПриема,
    втСписокЗаписей.ДатаУвольнения КАК ДатаУвольнения
    
ИЗ
    втНужнаяСтрока КАК втНужнаяСтрока
        ЛЕВОЕ СОЕДИНЕНИЕ втСписокЗаписей КАК втСписокЗаписей
        ПО (втНужнаяСтрока.Сотрудник = втСписокЗаписей.Сотрудник
        И втНужнаяСтрока.Период = втСписокЗаписей.Период
        )
Показать
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот