繁体   English   中英

如何根据另一列的最大值从一列中选择一个值,如果相同,则使用另一列的最大值

[英]How to select a value from one column based on the max value of another column and if that's the same, use the max value of another column

假设我有这张桌子:

KEY |  PID  |  ID   |  YEAR
___________________________
 1  |  123  | 999   |  2018
 2  |  123  | 999   |  2017
 3  |  123  | 999   |  2016
 4  |  456  | 888   |  2018
 5  |  456  | 999   |  2018
 6  |  456  | 777   |  2018 

我想返回唯一的KEY值和对应PID通过查询为准行已最新YEAR该特定PID 如果两个PIDsYEAR相同,则应检查哪个PIDs具有最新的ID

例如,预期结果将返回:

1  |  123  
5  |  456 

如您所见,返回1是因为它具有其余IDs之间的最新年份,而返回5是因为尽管它们都是相同的YEAR ,但ID值却最高。

只需使用row_number()

select t.*
from (select t.*,
             row_number() over (partition by pid order by year desc id desc) as seqnum
      from t
     ) t
where seqnum = 1;

假设id是唯一的另一种方法是:

select t.*
from t
where t.id = (select maxt2.id) keep (dense_rank first order by t2.id desc)
              from t t2
              where t2.pid = t.pid 
              order by t2.year desc
             );
SELECT  Key, PID
FROM table
WHERE [YEAR] = (SELECT MAX([YEAR]) FROM dbo.Ptable) 
AND ID = (SELECT MAX(ID) FROM table)

你可以试试看

SELECT DISTINCT T.KEY,T.PID  
FROM T INNER JOIN
(
  SELECT PID,MAX(ID) MAXID
  FROM T
  GROUP BY PID
) T2 ON T2.MAXID = T.ID 
INNER JOIN
(
  SELECT PID,MAX(YEAR) AS YID
  FROM T
  GROUP BY PID
) T3 ON T3.YID = T.YEAR
ORDER BY T.KEY

sqlfiddle: http ://sqlfiddle.com/#!4/b30e1/28

暂无
暂无

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

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