SQL:根据另一列的值在列上保留一个具有最大值的行
Posted
技术标签:
【中文标题】SQL:根据另一列的值在列上保留一个具有最大值的行【英文标题】:SQL : Keep ONE row with max value on a column depending on value of another column 【发布时间】:2021-04-29 18:58:01 【问题描述】:在 *** 上有详细记录,如何在每个组标识符 (SQL select only rows with max value on a column) 的列中找到具有某个最大值的行的整个数据。
但给定的解决方案将显示具有该最大值的所有行。 如果我们有 3 个 cols "ID, col1, col2" 并且我们想为每个 ID 保留 col1 值最高的行但是如果有多个,只保留 col2 值最低的实例?
谢谢!
【问题讨论】:
在 SO 上也有详细记录:Why should I provide an MCRE for what seems to me to be a very simple SQL query 只需在order by
中添加一个额外的列
【参考方案1】:
一种方法是rank()
或row_number()
;
select t.*
from (select t.*,
row_number() over (partition by id order by col1 desc, col2 asc) as seqnum
from t
) t
where seqnum = 1;
当同一 ID 存在重复的 max col1/min col2 时,如果您想要多行,您可以使用 rank()
。
【讨论】:
以上是关于SQL:根据另一列的值在列上保留一个具有最大值的行的主要内容,如果未能解决你的问题,请参考以下文章