Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft Access Новый топик    Ответить
 Поиск максимального значения одной строки в разных столбцах  [new]
Greg987
Member

Откуда:
Сообщений: 11
Добрый день!

В моей таблице есть столбцы с датами. До 5 столбцов. В запросе я делаю вычисляемое поле, в котором ищу максимальное значение в этих столбцах, соответственно для каждой строки. MAX и DMAX работают внутри одного столбца. А здесь несколько столбцов.
На текущий момент я делаю это с помощью вложенных IIF и все прекрасно работает. Но получается очень длинное выражение. И это неудобно.

Есть ли какая-то функция, которая позволит найти максимальное значение в одной строке в разных столбцах? Я не нашел, но может плохо искал? Что-то типа DMAX (столбец1, столбец2, столбец3, столбец4, столбец5).

Сообщение было отредактировано: 30 май 21, 16:17
30 май 21, 16:25    [22328986]     Ответить | Цитировать Сообщить модератору
 Re: Поиск максимального значения одной строки в разных столбцах  [new]
sdku
Member

Откуда: Краснодар
Сообщений: 7350
Greg987,
public function vbMAX()
dim a as double
a=поле1
if a <поле2 then a=поле2
if a <поле3 then a=поле3
if a <поле4 then a=поле4
if a <поле5 then a=поле5
'may be continue
vbMAX=a
end function
Не понял следующее:Вам нужно максимальное значение столбцов во всех записях(максимум по всей таблице)или в одной записи (ф-ция в примере)

Сообщение было отредактировано: 30 май 21, 17:24
30 май 21, 17:27    [22328998]     Ответить | Цитировать Сообщить модератору
 Re: Поиск максимального значения одной строки в разных столбцах  [new]
Greg987
Member

Откуда:
Сообщений: 11
Нужен максимум именно в одной строке. То есть в запросе есть 3,4 или 5 столбцов с датами и мне нужно выбрать максимальную дату в этих столбцах для каждой строки.

Подскажите пожалуйста, как эту функцию использовать теперь в запросе в вычисляемом поле?
Саму функцию, как я понимаю, нужно закинуть в созданный в vba модуль.

Сейчас для трех полей такое выражение: IIf([1]<=[2]; IIf([1]<=[3]; IIf([2]<=[3]; [3]; [2])); IIf([1]<=[3] ;[3]; [1])) as Поле1
Названия полей я сократил до цифр.
Для пяти полей то же самое выражение, но гораздо больше ифов.

И кстати, переменная а должна быть именно double, с учетом того, что в полях даты?

Спасибо.
30 май 21, 23:25    [22329053]     Ответить | Цитировать Сообщить модератору
 Re: Поиск максимального значения одной строки в разных столбцах  [new]
__Michelle
Member

Откуда:
Сообщений: 3199
Greg987
Нужен максимум именно в одной строке.
То есть в запросе есть 3,4 или 5 столбцов с датами и мне нужно
выбрать максимальную дату в этих столбцах для каждой строки.

Если записи имеют уникальный идентификатор, то можно так (без VBA и без IIF):
SELECT Id, Max(D) FROM
(
SELECT Id, D1 AS D FROM Tabl
UNION ALL
SELECT Id, D2 AS D FROM Tabl
UNION ALL
SELECT Id, D3 AS D FROM Tabl
UNION ALL
SELECT Id, D4 AS D FROM Tabl
UNION ALL
SELECT Id, D5 AS D FROM Tabl
)
GROUP BY Id
31 май 21, 01:31    [22329072]     Ответить | Цитировать Сообщить модератору
 Re: Поиск максимального значения одной строки в разных столбцах  [new]
sdku
Member

Откуда: Краснодар
Сообщений: 7350
Greg987
....
И кстати, переменная а должна быть именно double, с учетом того, что в полях даты?
...
Переменная может быть и дата/время.При работе с датами учтите это п.3
31 май 21, 03:15    [22329076]     Ответить | Цитировать Сообщить модератору
 Re: Поиск максимального значения одной строки в разных столбцах  [new]
sdku
Member

Откуда: Краснодар
Сообщений: 7350
про работу с датами погорячился-это актуально было для А-97(сейчас уже не надо)

К сообщению приложен файл (tmp.rar - 21Kb) cкачать
31 май 21, 03:48    [22329077]     Ответить | Цитировать Сообщить модератору
 Re: Поиск максимального значения одной строки в разных столбцах  [new]
Greg987
Member

Откуда:
Сообщений: 11
__Michelle,

в таблицах у меня есть поле с уникальным идентификатором. Но в запросе получается уникальный идентификатор только в пределах одной даты, а не вообще в запросе.

Но как вариант, можно данные из запроса вставлять в таблицу с уникальным ключом, тогда все заработает.
Я, кстати, попробую. Спасибо Вам большое за вариант.



sdku
Ваш вариант вообще идеален для меня. Спасибо огромное!
И что мне в нем нравится, что легко можно добавлять любое количество сравниваемых дат. Это круто!


Всем спасибо большое!
31 май 21, 21:09    [22329566]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft Access Ответить