![](/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.