[英]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;
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.