2

我需要为具有 5 列的表编写查询,这些列分别是ID1ID2ID3AB。这里, ID1, ID2, 和ID3构成主键。

对于每个ID1,找到最大值A。如果两个或多个As 具有最大值,则选择唯一一个具有最大值的记录B。最后用对应的ID2ID3值显示结果。

例如,对于下表

ID1 ID2 ID3   A  B
  1   2   3  10  5 
  1   3   4  30  4
  1   3   5  30  3
  2   2   3   5  1
  2   3   4   9  2
  2   3   5  11  3

查询应显示如下结果。

ID1 ID2 ID3  Max_A  
  1   3   4     30  
  2   3   5     11  
4

1 回答 1

3

这样做的要点是

  • ROW_NUMBER为每一行添加一个
  • 重新开始每个号码ID1
  • ORDER 从高到低在AB
  • 把它放在一个CTE方便取用的地方rn

SQL 语句

;WITH q AS (
  SELECT *, ROW_NUMBER() OVER (PARTITION BY ID1 ORDER BY A DESC, B DESC) AS rn
  FROM YourTable
)
SELECT *
FROM   q
WHERE  rn = 1
于 2012-07-04T15:11:52.410 回答