从联接表中,选择列的最大值,但如果有多个最大值,请从另一列中选择具有最大值的那个

时间:2011-05-12 22:53:49

标签: sql oracle

我需要将另一个表连接到我的查询,并从该连接表中获取特定列的最大值。问题是,有时用户将具有该最大值的倍数(例如:如果最大值为5.1,则还有另一行包含该最大值,因此它给出了多个结果)。我需要知道如何让它抓住最大值,并且当有最大值的倍数时(并且只有当有最大值的倍数时,以便我仍然从没有多个最大值的用户得到结果),从另一列中获取最大值,而不会忘记查询最初得到的最大值。

我已将下面的当前查询包含在内,返回多个最大值。我加入并引用的表是APPLICATION_VERSION。我需要根据来自VERSION_NUMBER列的USER_ACCOUNT_ID(我从EMPLOYEE表中获取)获取最大值。如果有多个VERSION_NUMBER的最大值,我希望它根据最大VERSION_CHANGE_DATE选择最大VERSION_NUMBER。有时虽然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 个答案:

答案 0 :(得分:1)

如果我理解正确的话,应该这样做。我不清楚为什么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
相关问题