из объединенной таблицы выберите максимальное значение столбца, но если есть кратные максимумы, выберите тот, который имеет максимальное значение из другого столбца - PullRequest
2 голосов
/ 13 мая 2011

Мне нужно присоединить другую таблицу к моему запросу и извлечь максимальное значение определенного столбца из этой объединенной таблицы. Проблема в том, что иногда пользователь будет иметь кратные этому максимальному значению (например, если максимальное значение равно 5,1, есть еще одна строка, которая также содержит это максимальное значение, поэтому она дает несколько результатов). Мне нужно знать, как заставить его захватить максимум, и когда есть кратные этого максимума (и ТОЛЬКО когда есть кратные этого максимума, так что я все еще получаю результаты от пользователей, у которых нет нескольких максимальных значений), возьмите максимальное значение из другого столбца, не забывая максимальное значение, которое изначально получил запрос.

Я включил свой текущий запрос ниже, который возвращает несколько максимальных значений. Таблица, к которой я присоединяюсь и на которую ссылаюсь, называется APPLICATION_VERSION. Мне нужно получить максимальное значение на основе USER_ACCOUNT_ID (который я получаю из таблицы EMPLOYEE) из столбца VERSION_NUMBER. Если есть несколько максимумов VERSION_NUMBER, я хочу выбрать максимальное VERSION_NUMBER на основе максимального VERSION_CHANGE_DATE. Иногда, хотя есть несколько кратных максимумов VERSION_CHANGE_DATE, поэтому я бы хотел, чтобы он выбрал один с максимальным VERSION_CHANGE_DATE, а затем APPLICATION_VERSION_ID.

Кстати, извините, если я сделал это более сложным, чем нужно. Просто хотел быть тщательным. Буду очень признателен за любую помощь:)

SELECT e.user_account_id,e.employee_id,e.external_id_1,e.external_id_2,e.last_name as LAST,e.first_name as FIRST,e.job_profile_type as rank,e.status_change_date,t.name as TEAM,a.alignment_name as TERRITORY,m.machine_node_id as NODE_ID,a.alignment_id,t.division,av.version_change_date,av.version_number as EI_Version,av.login_date as LAST_LOGIN,m.platform_version
FROM employee e, alignment a, machine_node m, team t, application_version av,
(SELECT av.user_account_id,MAX(av.version_change_date) as maxdate,max(av.application_version_id) as maxversionid
FROM application_version av
GROUP BY av.user_account_id) av2
where e.employee_id = a.employee_id
and av.version_change_date = av2.maxdate
and e.employee_id = m.employee_id
and t.team_id = a.team_id
and e.status = 'ACTV'
and m.status = 'ACTV'
and e.user_account_id=av.user_account_id
and m.machine_type = 'REMO'
and e.external_id_1= 'XM68823'
order by e.last_name asc

1 Ответ

1 голос
/ 13 мая 2011

Если я вас правильно понял, это должно сработать. Мне непонятно, почему version_number вообще не появляется в вашем примере запроса, но, возможно, это была ошибка.

Измените встроенный вид на:

(SELECT av.user_account_id,
        MAX(av.version_number) KEEP (DENSE_RANK LAST ORDER BY version_number,version_change_date, application_version_id) as maxversion,
        MAX(av.version_change_date) KEEP (DENSE_RANK LAST ORDER BY version_number,version_change_date, application_version_id) as maxdate,
        max(av.application_version_id) KEEP (DENSE_RANK LAST ORDER BY version_number,version_change_date, application_version_id) as maxversionid
FROM application_version av
GROUP BY av.user_account_id) av2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...