Функция ECТЬNULL и агрегатная функция МАКСИМУМ периодически встречаются в запросе на одном поле и у программиста появляется выбор в каком порядке применить эти функции, на первый взгляд результат ничем не должен отличаться, но разница все же случается, ниже приведу пример в котором один из вариантов приведет к ошибке.
Приведет к ошибке
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
ВЫБРАТЬ "Иванов И.И." КАК Сотрудник, "1" КАК НомерДокумента ПОМЕСТИТЬ ВТСотрудники ГДЕ ЛОЖЬ ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ДАТАВРЕМЯ(2026, 1, 1) КАК Дата, "1" КАК Номер ПОМЕСТИТЬ ВТДокументы ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ МАКСИМУМ(ЕСТЬNULL(ВТДокументы.Дата, ДАТАВРЕМЯ(1, 1, 1))) КАК Дата ИЗ ВТСотрудники КАК ВТСотрудники ЛЕВОЕ СОЕДИНЕНИЕ ВТДокументы КАК ВТДокументы ПО ВТСотрудники.НомерДокумента = ВТДокументы.Номер |

Не приведет к ошибке
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
ВЫБРАТЬ "Иванов И.И." КАК Сотрудник, "1" КАК НомерДокумента ПОМЕСТИТЬ ВТСотрудники ГДЕ ЛОЖЬ ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ДАТАВРЕМЯ(2026, 1, 1) КАК Дата, "1" КАК Номер ПОМЕСТИТЬ ВТДокументы ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ЕСТЬNULL(МАКСИМУМ(ВТДокументы.Дата), ДАТАВРЕМЯ(1, 1, 1)) КАК Дата ИЗ ВТСотрудники КАК ВТСотрудники ЛЕВОЕ СОЕДИНЕНИЕ ВТДокументы КАК ВТДокументы ПО ВТСотрудники.НомерДокумента = ВТДокументы.Номер |

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