0
FID RP  Area    Count
1   100 0.780   1
2   100 0.906   2
2   500 0.094   2
3   100 1.000   1
4   100 1.000   1
5   100 0.784   2
5   500 0.916   2
6   100 0.332   3
6   500 0.780   3
6   555 0.643   3

在上表中,我想检索面积>0.4 的列。这将检索 8 行。但我想以其他方式回答。看看案例在哪里FID =5。在这种情况下,RP 100 和 500 的区域满足标准,但输出应该被赋予高权重RP =100。对于FID =6RP=100不满足条件,但RP=500RP=555满足条件的情况。我想给RP=500.

要求的结果:

FID RP  Area    Count
1   100 0.78007 1
2   100 0.90626 2
3   100 1   1
4   100 1   1
5   100 0.7835  2
6   500 0.78    3
4

1 回答 1

1

因此,您希望每个 id 的第一行的值Area超过 0.4 并且“first”按RP.

窗口函数提供了执行此操作的机制。大多数数据库支持row_number()

select FID, RP, Area, "Count"
from (select t.*,
             row_number() over (partition by fid order by rp) as seqnum
      from t
      where Area > 0.4
     ) t
where seqnum = 1;

子查询过滤行,因此只包括具有有效值的行Area。该row_number()函数将顺序值分配给 an 中的行fid(由于partition by子句)。这些值按顺序分配rp(由于该order by子句)。

于 2013-06-13T17:03:41.423 回答