一尘不染

sql-从基于组的行中获取ID

sql

表A

  • tableAID
  • tableBID
  • 年级

表B

  • tableBID
  • 姓名
  • 描述

表A从两个表中的tableBID链接到表b。

如果我想为表B中的每一行找到表A中具有最高等级的行,则可以这样编写查询:

select max(grade) from TableA group by tableBID

但是,我不仅想要成绩,还想要成绩和该行的ID。


阅读 142

收藏
2021-05-30

共1个答案

一尘不染

您可以尝试类似

SELECT  a.*
FROM    TableA a INNER JOIN
        (
            SELECT  tableBID,
                    MAX(grade) MaxGrade
            FROM    TableA
            GROUP BY tableBID
        ) B ON a.tableBID = B.tableBID AND a.grade = B.MaxGrade

使用Sql Server 2005 ROW_NUMBER函数,您也可以尝试

SELECT  tableAID,
        tableBID,
        grade
FROM    (
            SELECT  *,
                    ROW_NUMBER() OVER (PARTITION BY tableBID ORDER BY grade DESC) RowNum
            FROM    @TableA
        ) A
WHERE   a.RowNum = 1
2021-05-30