Найти максимум без использования временных таблиц
Есть таблица СотрудникиПринадлежность с полями НомерСотрудника (число), ШтатнаяДолжность (число), НомерДокумента (число).
Необходимо найти штатную должность сотрудника по его номеру, взяв её из документа с максимальным номером.
Тк используем внешний источник данных, то временные таблицы использовать нельзя.
Делаю так:
но в результате получаю все штатные должности сотрудника, а не последнюю.
Объясните, что я не так делаю?
Необходимо найти штатную должность сотрудника по его номеру, взяв её из документа с максимальным номером.
Тк используем внешний источник данных, то временные таблицы использовать нельзя.
Делаю так:
ВЫБРАТЬ
РезультатыСогласованияЗНП.ИдентификаторЗНП КАК ИдентификаторЗНП,
РезультатыСогласованияЗНП.ФИОСогласующего,
РезультатыСогласованияЗНП.НомерСотрудника,
ВложенныйЗапрос.ШтатнаяДолжность
ИЗ
ВнешнийИсточникДанных.XYZ.Таблица.РезультатыСогласованияЗНП КАК РезультатыСогласованияЗНП
ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
СотрудникиПринадлежность.НомерСотрудника КАК НомерСотрудника,
СотрудникиПринадлежность.ШтатнаяДолжность КАК ШтатнаяДолжность,
МАКСИМУМ(СотрудникиПринадлежность.НомерДокумента ) КАК НомерДокумента
ИЗ
ВнешнийИсточникДанных.XYZ.Таблица.СотрудникиПринадлежность КАК СотрудникиПринадлежность
СГРУППИРОВАТЬ ПО
СотрудникиПринадлежность.ШтатнаяДолжность,
СотрудникиПринадлежность.НомерСотрудника) КАК ВложенныйЗапрос
ПО РезультатыСогласованияЗНП.НомерСотрудника= ВложенныйЗапрос.НомерСотрудника
Показатьно в результате получаю все штатные должности сотрудника, а не последнюю.
Объясните, что я не так делаю?
По теме из базы знаний
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(13) проверить не могу. Как-то так:
ВЫБРАТЬ
РезультатыСогласованияЗНП.ИдентификаторЗНП КАК ИдентификаторЗНП,
РезультатыСогласованияЗНП.ФИОСогласующего,
РезультатыСогласованияЗНП.НомерСотрудника,
ВложенныйЗапрос.ШтатнаяДолжность
ИЗ
ВнешнийИсточникДанных.XYZ.Таблица.РезультатыСогласованияЗНП КАК РезультатыСогласованияЗНП
ЛЕВОЕ СОЕДИНЕНИЕ
// -->
(ВЫБРАТЬ
Т1.НомерСотрудника,
//Т1.НомерДокумента,
Т2.ШтатнаяДолжность
ИЗ
(ВЫБРАТЬ
СотрудникиПринадлежность.НомерСотрудника КАК НомерСотрудника,
МАКСИМУМ(СотрудникиПринадлежность.НомерДокумента) КАК НомерДокумента
ИЗ
ВнешнийИсточникДанных.XYZ.Таблица.СотрудникиПринадлежность КАК СотрудникиПринадлежность
СГРУППИРОВАТЬ ПО
СотрудникиПринадлежность.НомерСотрудника
) КАК Т1
ЛЕВОЕ СОЕДИНЕНИЕ
ВнешнийИсточникДанных.XYZ.Таблица.СотрудникиПринадлежность КАК Т2
ПО
Т1.НомерСотрудника = Т2.НомерСотрудника
И Т1.НомерДокумента = Т2.НомерДокумента
) ВложенныйЗапрос
// <--
ПО
РезультатыСогласованияЗНП.НомерСотрудника = ВложенныйЗапрос.НомерСотрудника
ПоказатьВЫБРАТЬ
СотрудникиПринадлежность.НомерСотрудника КАК НомерСотрудника,
СотрудникиПринадлежность.ШтатнаяДолжность КАК ШтатнаяДолжность,
СотрудникиПринадлежность.НомерДокумента КАК НомерДокумента
ИЗ
ВнешнийИсточникДанных.XYZ.Таблица.СотрудникиПринадлежность КАК СотрудникиПринадлежность
внутреннее соединение (ВЫБРАТЬ
сп.НомерСотрудника КАК НомерСотрудника,
сп.ШтатнаяДолжность КАК ШтатнаяДолжность,
максимум(сп.НомерДокумента) как номДок
ИЗ
ВнешнийИсточникДанных.XYZ.Таблица.СотрудникиПринадлежность) КАК сп
ПО РезультатыСогласованияЗНП.НомерСотрудника= сп.НомерСотрудника
и РезультатыСогласованияЗНП.ШтатнаяДолжность= сп.ШтатнаяДолжность
и РезультатыСогласованияЗНП.НомерДокумента= сп.номДок) как СотрудникиПринадлежность
Показать
Как-то так, думаю:
ВЫБРАТЬ
РезультатыСогласованияЗНП.ИдентификаторЗНП КАК ИдентификаторЗНП,
РезультатыСогласованияЗНП.ФИОСогласующего,
РезультатыСогласованияЗНП.НомерСотрудника,
ВложенныйЗапрос2.ШтатнаяДолжность
ИЗ
ВнешнийИсточникДанных.XYZ.Таблица.РезультатыСогласованияЗНП КАК РезультатыСогласованияЗНП
ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
СотрудникиПринадлежность.НомерСотрудника КАК НомерСотрудника,
МАКСИМУМ(СотрудникиПринадлежность.НомерДокумента ) КАК НомерДокумента
ИЗ
ВнешнийИсточникДанных.XYZ.Таблица.СотрудникиПринадлежность КАК СотрудникиПринадлежность
СГРУППИРОВАТЬ ПО
СотрудникиПринадлежность.НомерСотрудника) КАК ВложенныйЗапрос
ПО РезультатыСогласованияЗНП.НомерСотрудника= ВложенныйЗапрос.НомерСотрудника
ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
СотрудникиПринадлежность.НомерСотрудника КАК НомерСотрудника,
СотрудникиПринадлежность.ШтатнаяДолжность КАК ШтатнаяДолжность,
СотрудникиПринадлежность.НомерДокумента КАК НомерДокумента
ИЗ
ВнешнийИсточникДанных.XYZ.Таблица.СотрудникиПринадлежность КАК СотрудникиПринадлежность
) КАК ВложенныйЗАпрос2
ПО ВложенныйЗАпрос2.НомерСотрудника = ВложенныйЗапрос.НомерСотрудника
И ВложенныйЗАпрос2.НомерДокумента = ВложенныйЗапрос.НомерДокумента
Показать
(8) попробовал.
результат для номера сотрудника 48352:
НомерДокумента НомерСотрудника ШтатнаяДолжность
8566154 48352 50407406
8566154 48352 50407406
8393241 48352 50355405
8393241 48352 50355405
8393241 48352 50321669
8393241 48352 50303385
8393241 48352 50217573
результат для номера сотрудника 48352:
НомерДокумента НомерСотрудника ШтатнаяДолжность
8566154 48352 50407406
8566154 48352 50407406
8393241 48352 50355405
8393241 48352 50355405
8393241 48352 50321669
8393241 48352 50303385
8393241 48352 50217573
Из-за чего выводятся все должности: из-за СГРУППИРОВАТЬ ПО
СотрудникиПринадлежность.ШтатнаяДолжность,
Если у сотрудника с номером Н были разными документами установлены должности А и Б последовательно, то внутренний запрос вернет две строки
Н, А, номер документа 1
Н, Б, номер документа 2
Поэтому при лев соединении первой таблицы со второй по Н и получаем размножение строк.
Как надо - написали в 5-ом сообщении.
СотрудникиПринадлежность.ШтатнаяДолжность,
Если у сотрудника с номером Н были разными документами установлены должности А и Б последовательно, то внутренний запрос вернет две строки
Н, А, номер документа 1
Н, Б, номер документа 2
Поэтому при лев соединении первой таблицы со второй по Н и получаем размножение строк.
Как надо - написали в 5-ом сообщении.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот