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 =6
,RP=100
不符合条件的情况,RP=500
和RP=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
答案 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
子句)。