简体   繁体   English

如何基于另一个字段在字段中选择MAX值

[英]How to select MAX value in field based on another field

I currently have a query (Oracle query returning results from a linked server to a SQL table) that returns results like this: - 我目前有一个查询(Oracle查询将结果从链接服务器返回到SQL表),该查询返回以下结果:-

PersonID | EncounterNo | Location
---------+-------------+-----------
123456   | 1           | London
123456   | 2           | Manchester
123456   | 3           | Glasgow
246810   | 1           | Liverpool
246810   | 2           | Newcastle
357911   | 1           | Edinburgh
357911   | 2           | Aberdeen
357911   | 3           | Dublin

I would like to select MAX value for each PersonID so the output would be: - 我想为每个PersonID选择MAX值,因此输出为:-

PersonID | EncounterNo | Location
---------+-------------+-------------
123456   | 3           | Glasgow
246810   | 2           | Newcastle
357911   | 3           | Dublin
SELECT t.*
FROM table t
INNER JOIN (
    SELECT t.PersonID, MAX(t.EncounterNo)
    FROM table t
    GROUP BY t.PersonID
) j
ON t1.PersonID = j.PersonID AND t.EncounterNo = j.EncounterNo 

There is no need to use self-join here. 此处无需使用自联接。 You can either use analytic or aggregate functions. 您可以使用解析函数或聚合函数。

For example aggregate case: 例如汇总情况:

select PersonID
  , Max(EncounterNo)
  , MAx(Locaction) (DENSE_RANK FIRST ORDER BY EncounterNo Desc)
from T
group by PersonID;

The trick is to apply aggregate function "max" only onto the FIRST occurence of Location within the group (ordered by EncounterNo). 诀窍是仅将聚合函数“ max”应用于组中“位置”的第一个出现位置(按EncounterNo排序)。

Analytic case: 分析案例:

Select PersonID, EncounterNo, Location
from
  (
    select T.*,
       row_number() over (partition by PersonId order by EncounterNo desc) rn
    from t
  )
 where rn=1;

See more examaples here. 在此处查看更多示例

SELECT YT.* 
FROM YOUR_TABLE YT, (SELECT MAX(EncounterNo) MAX_No, PersonID PID 
                     FROM YOUR_TABLE 
                     GROUP BY PERSONID) AA
WHERE YT.PersonID = AA.PID AND YT.EncounterNo = AA.MAX_No;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM