通过比较单个表中的多个列来检索结果

时间:2013-06-13 16:58:21

标签: sql

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

在上表中,我想检索Area> 0.4的列。这将检索8行。但我想以其他方式回答。 查看FID =5的案例。在这种情况下,RP 100和500的面积满足标准,但RP =100的输出应该具有高的权重。对于FID =6RP=100不符合条件的情况,RP=500RP=555符合条件。我希望将weigtage赋予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

1 个答案:

答案 0 :(得分: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()函数为fid内的行分配顺序值(因为partition by子句)。这些值按rp顺序分配(由于order by子句)。