0

我是 sql 方面的新手。所以如果这个问题听起来很简单,那么请放过我。我在 sql 表中有 4 个列。假设 A,B,C,D 。对于任何 BC 组合,我可以获得任意数量的行。对于这些选定的行,我需要获得最多 3 行(这反过来为我提供了 3 个唯一的 A 值)对于这些选定的行,我应该具有 D 的前 3 个最大值。与该 BC 组合的其他条目相比。

因此可以有任意数量的 BC 组合,因此上述逻辑应该暗示所有这些组合。

4

1 回答 1

1

大多数数据库都支持排名功能。有了这些,你可以做你想做的事情,如下所示:

select A, B, C, D
from (select t.*,
             row_number() over (partition by B, C order by D desc) as seqnum
      from t
     ) t
where seqnum <= 3
order by B, C, D desc

row_number() 函数创建一个序列号。此数字在非常 B、C 组中从“1”开始,并按 D 的值降序排列。

于 2012-09-02T12:55:55.850 回答