案例情况:
==========================================================
select * from t;c1 c2 c3 c4
101 201006 5.00 100.00
101 201001 6.00 120.00
101 201003 7.00 180.00
102 201006 2.00 100.00
102 201001 8.00 120.00
102 200903 11.00 190.00
102 201005 3.00 130.00
102 201002 19.00 210.00说明:t表有4000W+条数据
请用效率最高的sql语句取出
每个c1最小c2时的记录比如
c1 c2 c3 c4
101 201001        6.00 120.00
102 200903        11.00         190.00
==========================================================
本人水平有限,下面的语句报语法错误,说rule子句聚合函数用法不当
select c1,c2,c3,c4
from
(select /*+ parallel(a,4)*/
c1,c2,c3,c4
from t) b
model
return updated rows
partition by(c1)
dimension by (c2)
measures(c3,c4)
rules(c3[any]=c3[min(c2)],
c4[any]=c4[min(c2)]);求高人指点

解决方案 »

  1.   

    需要这么复杂吗
    又不涉及跨行引用
    为什么要用model子句直接用分析函数排下序就行
    select *
    from
    (
    select a.*,row_number() over(partition by c1 order by c2)rn 
    from t
    )
    where rn=1
    ;
      

  2.   

    如果一定要使用model子句的话应该怎么写呢
    经测试,2楼提供方法的执行计划还可以,但由于有order by排序
    效率依然有些影响
    求正确的model子句写法