Sql 筛选每个条目的最大值行

Sql 筛选每个条目的最大值行,sql,Sql,如果我想为每个“number”条目(当note是另一个表中的联接列时)获取MAX(changeNo)行,请执行以下操作: SELECT T0.id, T0.number, T0.date, T0.changeNo, T1.note FROM table T0 INNER JOIN table2 T1 ON T0.joinID = T1.joinID WHERE changeNo = (SELECT max(changeNo) FROM table) 但这从“全局最大值”

如果我想为每个“number”条目(当note是另一个表中的联接列时)获取MAX(changeNo)行,请执行以下操作:

SELECT T0.id, T0.number, T0.date, T0.changeNo, T1.note 
FROM 
    table T0 INNER JOIN table2 T1 ON T0.joinID = T1.joinID 
WHERE
    changeNo = (SELECT max(changeNo) FROM table) 
但这从“全局最大值”中获取最大值,而不是从每个相同“数字”条目的最大值中获取最大值

您需要一个相关子查询:

SELECT T0.id, T0.number, T0.date, T0.changeNo, T1.note 
FROM table T0 INNER JOIN
     table2 T1
     ON T0.joinID = T1.joinID 
WHERE t0.changeNo = (SELECT max(t0.changeNo) FROM table tt0 WHERE tt0.joinID = t0.joinID) ;
这将返回每个
joinID
的最大值。注意:还有其他方法可以实现这样的查询。通常,关联子查询是具有正确索引的最快方法,尤其是
表(joinID,changeNo)
上的方法

SELECT T0.id, T0.number, T0.date, T0.changeNo, T1.note 
FROM table T0 INNER JOIN
     table2 T1
     ON T0.joinID = T1.joinID 
WHERE t0.changeNo = (SELECT max(t0.changeNo) FROM table tt0 WHERE tt0.joinID = t0.joinID) ;