繁体   English   中英

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

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

我目前有一个查询(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

我想为每个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 

此处无需使用自联接。 您可以使用解析函数或聚合函数。

例如汇总情况:

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

诀窍是仅将聚合函数“ max”应用于组中“位置”的第一个出现位置(按EncounterNo排序)。

分析案例:

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.

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