Вложенный запрос. Как избавиться от лишних строк.
Приветствую.
Пытаюсь получить текущий ФОТ и Тариф сотрудника.
Не могу понять как взять только последний период по каждому сотруднику.
Если по одному, то выбираем первую упорядоченную строку, а вот как сделать, чтобы в общем списке у каждого сотрудника осталась строка с наибольшим периодом, не могу сообразить.
Знающие, подскажите, пожалуйста!
Сотрудник ТарифнаяСтавка ФОТ Надбавка Период ДатаПриема
Хиии Нииииии Виииииииииии 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
Пытаюсь получить текущий ФОТ и Тариф сотрудника.
Не могу понять как взять только последний период по каждому сотруднику.
Если по одному, то выбираем первую упорядоченную строку, а вот как сделать, чтобы в общем списке у каждого сотрудника осталась строка с наибольшим периодом, не могу сообразить.
Знающие, подскажите, пожалуйста!
ВЫБРАТЬ
ПлановыйФОТИтогиСрезПоследних.Сотрудник КАК Сотрудник,
ПлановыйФОТИтогиСрезПоследних.ТарифнаяСтавка КАК ТарифнаяСтавка,
ПлановыйФОТИтогиСрезПоследних.ФОТ КАК ФОТ,
ПлановыйФОТИтогиСрезПоследних.Надбавка КАК Надбавка,
ПлановыйФОТИтогиСрезПоследних.Период КАК Период,
ТекущиеКадровыеДанные.ДатаПриема
ИЗ
РегистрСведений.ПлановыйФОТИтоги.СрезПоследних КАК ПлановыйФОТИтогиСрезПоследних
ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
ТекущиеКадровыеДанные.Сотрудник,
ТекущиеКадровыеДанные.ДатаПриема КАК ДатаПриема,
ТекущиеКадровыеДанные.ДатаУвольнения КАК ДатаУвольнения
ИЗ
РегистрСведений.ТекущиеКадровыеДанныеСотрудников КАК ТекущиеКадровыеДанные
ГДЕ
ДатаУвольнения = ДАТАВРЕМЯ(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
По теме из базы знаний
- Обзор имеющихся библиотек OneScript
- Планы запросов - это просто! Разбор оптимизаций запросов PostgreSQL на живых примерах
- Импортозамещение BI. Встраивание 1С:Аналитики в аналитический ландшафт компании
- Варианты отладки и оптимизации запросов в 1С
- Массовое изменение записей регистров сведений и накопления (слияние, обновление, удаление)
Найденные решения
(2) Да, но нет. Но таки да.
Нашёл примерно тоже самое
Переделал под себя. Работает.
Пытаюсь понять, зачем нужны 3 и 4 ВТ?
Нашёл примерно тоже самое
Переделал под себя. Работает.
Пытаюсь понять, зачем нужны 3 и 4 ВТ?
///////////////////////////////////////////////////////////////////////////////// 1 Список записей неуволенных сотрудников втСписокЗаписей
ВЫБРАТЬ
ПлановыйФОТИтогиСрезПоследних.Сотрудник КАК Сотрудник,
ПлановыйФОТИтогиСрезПоследних.ТарифнаяСтавка КАК ТарифнаяСтавка,
ПлановыйФОТИтогиСрезПоследних.ФОТ КАК ФОТ,
ПлановыйФОТИтогиСрезПоследних.Надбавка КАК Надбавка,
ПлановыйФОТИтогиСрезПоследних.Период КАК Период,
ТекущиеКадровыеДанные.ДатаПриема КАК ДатаПриема,
ТекущиеКадровыеДанные.ДатаУвольнения КАК ДатаУвольнения
ПОМЕСТИТЬ втСписокЗаписей
ИЗ
РегистрСведений.ПлановыйФОТИтоги.СрезПоследних КАК ПлановыйФОТИтогиСрезПоследних
ПРАВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
ТекущиеКадровыеДанные.Сотрудник,
ТекущиеКадровыеДанные.ДатаПриема КАК ДатаПриема,
ТекущиеКадровыеДанные.ДатаУвольнения КАК ДатаУвольнения
ИЗ
РегистрСведений.ТекущиеКадровыеДанныеСотрудников КАК ТекущиеКадровыеДанные
ГДЕ
ДатаУвольнения = ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
И ДатаПриема <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)) КАК ТекущиеКадровыеДанные
ПО ПлановыйФОТИтогиСрезПоследних.Сотрудник = ТекущиеКадровыеДанные.Сотрудник
//ГДЕ
// ПлановыйФОТИтогиСрезПоследних.Сотрудник В (&Сотрудник)
;
//////////////////////////////////////////////////////////// //////////////////// 2 МАКС ДАТА по каждому сотруднику
ВЫБРАТЬ
втСписокЗаписей.Сотрудник КАК Сотрудник,
МАКСИМУМ(втСписокЗаписей.Период) КАК Период
ПОМЕСТИТЬ втМаксДаты
ИЗ
втСписокЗаписей КАК втСписокЗаписей
СГРУППИРОВАТЬ ПО
втСписокЗаписей.Сотрудник
;
//////////////////////////////////////////////////////////// //////////////////// 3
ВЫБРАТЬ
втСписокЗаписей.Сотрудник КАК Сотрудник,
втСписокЗаписей.Период КАК Период
ПОМЕСТИТЬ втДляВычисленияНужной
ИЗ
втСписокЗаписей КАК втСписокЗаписей
ВНУТРЕННЕЕ СОЕДИНЕНИЕ втМаксДаты КАК втМаксДаты
ПО втСписокЗаписей.Сотрудник = втМаксДаты.Сотрудник
И втСписокЗаписей.Период = втМаксДаты.Период
;
//////////////////////////////////////////////////////////// //////////////////// 4
ВЫБРАТЬ
втДляВычисленияНужной.Сотрудник КАК Сотрудник,
втДляВычисленияНужной.Период КАК Период
ПОМЕСТИТЬ втНужнаяСтрока
ИЗ
втДляВычисленияНужной КАК втДляВычисленияНужной
СГРУППИРОВАТЬ ПО
втДляВычисленияНужной.Сотрудник,
втДляВычисленияНужной.Период
;
//////////////////////////////////////////////////////////// //////////////////// 5
ВЫБРАТЬ
втНужнаяСтрока.Сотрудник КАК Сотрудник,
втНужнаяСтрока.Период КАК Период,
втСписокЗаписей.ТарифнаяСтавка КАК ТарифнаяСтавка,
втСписокЗаписей.ФОТ КАК ФОТ,
втСписокЗаписей.Надбавка КАК Надбавка,
втСписокЗаписей.ДатаПриема КАК ДатаПриема,
втСписокЗаписей.ДатаУвольнения КАК ДатаУвольнения
ИЗ
втНужнаяСтрока КАК втНужнаяСтрока
ЛЕВОЕ СОЕДИНЕНИЕ втСписокЗаписей КАК втСписокЗаписей
ПО (втНужнаяСтрока.Сотрудник = втСписокЗаписей.Сотрудник
И втНужнаяСтрока.Период = втСписокЗаписей.Период
)
ПоказатьОстальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1)
ВЫБРАТЬ
ТекущиеКадровыеДанные.Сотрудник,
МАКСИМУМ(ТекущиеКадровыеДанные.ДатаПриема) КАК ДатаПриема
ИЗ
РегистрСведений.ТекущиеКадровыеДанныеСотрудников КАК ТекущиеКадровыеДанные
ГДЕ
ДатаУвольнения = ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
И ДатаПриема <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
СГРУППИРОВАТЬ ПО Сотрудник
Показать
(2) Да, но нет. Но таки да.
Нашёл примерно тоже самое
Переделал под себя. Работает.
Пытаюсь понять, зачем нужны 3 и 4 ВТ?
Нашёл примерно тоже самое
Переделал под себя. Работает.
Пытаюсь понять, зачем нужны 3 и 4 ВТ?
///////////////////////////////////////////////////////////////////////////////// 1 Список записей неуволенных сотрудников втСписокЗаписей
ВЫБРАТЬ
ПлановыйФОТИтогиСрезПоследних.Сотрудник КАК Сотрудник,
ПлановыйФОТИтогиСрезПоследних.ТарифнаяСтавка КАК ТарифнаяСтавка,
ПлановыйФОТИтогиСрезПоследних.ФОТ КАК ФОТ,
ПлановыйФОТИтогиСрезПоследних.Надбавка КАК Надбавка,
ПлановыйФОТИтогиСрезПоследних.Период КАК Период,
ТекущиеКадровыеДанные.ДатаПриема КАК ДатаПриема,
ТекущиеКадровыеДанные.ДатаУвольнения КАК ДатаУвольнения
ПОМЕСТИТЬ втСписокЗаписей
ИЗ
РегистрСведений.ПлановыйФОТИтоги.СрезПоследних КАК ПлановыйФОТИтогиСрезПоследних
ПРАВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
ТекущиеКадровыеДанные.Сотрудник,
ТекущиеКадровыеДанные.ДатаПриема КАК ДатаПриема,
ТекущиеКадровыеДанные.ДатаУвольнения КАК ДатаУвольнения
ИЗ
РегистрСведений.ТекущиеКадровыеДанныеСотрудников КАК ТекущиеКадровыеДанные
ГДЕ
ДатаУвольнения = ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
И ДатаПриема <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)) КАК ТекущиеКадровыеДанные
ПО ПлановыйФОТИтогиСрезПоследних.Сотрудник = ТекущиеКадровыеДанные.Сотрудник
//ГДЕ
// ПлановыйФОТИтогиСрезПоследних.Сотрудник В (&Сотрудник)
;
//////////////////////////////////////////////////////////// //////////////////// 2 МАКС ДАТА по каждому сотруднику
ВЫБРАТЬ
втСписокЗаписей.Сотрудник КАК Сотрудник,
МАКСИМУМ(втСписокЗаписей.Период) КАК Период
ПОМЕСТИТЬ втМаксДаты
ИЗ
втСписокЗаписей КАК втСписокЗаписей
СГРУППИРОВАТЬ ПО
втСписокЗаписей.Сотрудник
;
//////////////////////////////////////////////////////////// //////////////////// 3
ВЫБРАТЬ
втСписокЗаписей.Сотрудник КАК Сотрудник,
втСписокЗаписей.Период КАК Период
ПОМЕСТИТЬ втДляВычисленияНужной
ИЗ
втСписокЗаписей КАК втСписокЗаписей
ВНУТРЕННЕЕ СОЕДИНЕНИЕ втМаксДаты КАК втМаксДаты
ПО втСписокЗаписей.Сотрудник = втМаксДаты.Сотрудник
И втСписокЗаписей.Период = втМаксДаты.Период
;
//////////////////////////////////////////////////////////// //////////////////// 4
ВЫБРАТЬ
втДляВычисленияНужной.Сотрудник КАК Сотрудник,
втДляВычисленияНужной.Период КАК Период
ПОМЕСТИТЬ втНужнаяСтрока
ИЗ
втДляВычисленияНужной КАК втДляВычисленияНужной
СГРУППИРОВАТЬ ПО
втДляВычисленияНужной.Сотрудник,
втДляВычисленияНужной.Период
;
//////////////////////////////////////////////////////////// //////////////////// 5
ВЫБРАТЬ
втНужнаяСтрока.Сотрудник КАК Сотрудник,
втНужнаяСтрока.Период КАК Период,
втСписокЗаписей.ТарифнаяСтавка КАК ТарифнаяСтавка,
втСписокЗаписей.ФОТ КАК ФОТ,
втСписокЗаписей.Надбавка КАК Надбавка,
втСписокЗаписей.ДатаПриема КАК ДатаПриема,
втСписокЗаписей.ДатаУвольнения КАК ДатаУвольнения
ИЗ
втНужнаяСтрока КАК втНужнаяСтрока
ЛЕВОЕ СОЕДИНЕНИЕ втСписокЗаписей КАК втСписокЗаписей
ПО (втНужнаяСтрока.Сотрудник = втСписокЗаписей.Сотрудник
И втНужнаяСтрока.Период = втСписокЗаписей.Период
)
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот
