![](/img/trans.png)
[英]How can I select max value from one column and update another column with selected Max value
[英]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
。 如果兩個PIDs
的YEAR
相同,則應檢查哪個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.