簡體   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