sql-根据group by从行中获取id
表Asql-根据group by从行中获取id,sql,group-by,Sql,Group By,表A 食疗 投标书 等级 表B 投标书 名字 描述 表A从两个表中的tableBID链接到表b 如果我想在表A中为表B中的每一行找到级别最高的行,我会这样编写查询: select max(grade) from TableA group by tableBID 但是,我不只是想要成绩,我想要成绩加上那一行的id。假设你只有一个Max()(巨大的假设),你可以做min(tableaid),其中grade=(选择Max(grade)等…) 或者如果您想要所有匹配的ID SELECT Tab
- 食疗
- 投标书
- 等级
- 投标书
- 名字
- 描述
select max(grade) from TableA group by tableBID
但是,我不只是想要成绩,我想要成绩加上那一行的id。假设你只有一个Max()(巨大的假设),你可以做min(tableaid),其中grade=(选择Max(grade)等…) 或者如果您想要所有匹配的ID
SELECT TableAID, Grade
FROM TableA INNER JOIN (SELECT tableBID,
MAX(grade) Grade
FROM TableA
GROUP BY tableBID) MaxGrade
ON TableA.Grade = MaxGrade.Grade
你可以试试类似的东西
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
使用SQLServer2005函数,您还可以尝试
SELECT tableAID,
tableBID,
grade
FROM (
SELECT *,
ROW_NUMBER() OVER (PARTITION BY tableBID ORDER BY grade DESC) RowNum
FROM @TableA
) A
WHERE a.RowNum = 1
只需使用一点自引用NOT EXISTS子句:
DECLARE @tableA TABLE (tableAID int IDENTITY(1,1), tableBID int, grade int)
INSERT INTO @tableA(tableBID, grade) VALUES(10, 1)
INSERT INTO @tableA(tableBID, grade) VALUES(10, 3)
INSERT INTO @tableA(tableBID, grade) VALUES(20, 4)
INSERT INTO @tableA(tableBID, grade) VALUES(20, 8)
INSERT INTO @tableA(tableBID, grade) VALUES(30, 10)
INSERT INTO @tableA(tableBID, grade) VALUES(30, 6)
SELECT tableAID, grade
FROM @tableA ta
WHERE NOT EXISTS (SELECT 1 FROM @tableA WHERE tableBID = ta.tableBID AND grade > ta.grade)