FAQ > 金融建模 > 应用案例 > 数据处理

Q:分组后取每组的前N行集合的处理示例    

  • A:实现示例:取指定日每个行业涨幅前3只股票的集合
    endt:=20250711T;
    //--取数据:指定日A股的行业与当日涨幅
    setsysparam(pn_date(),endt);
    stocks:=getAbkbydate("A股",endt);
    arr:= select thisrow as "StockID",spec(StockSWIndustryName1(),thisrow) as 'hy',
          spec(stockzf3(),thisrow) as 'zf'
       from stocks end;
    //--分组并排序,而后取每个行业的前三只
    t:=array();//存放前三只股票
    //通过select+group by对arr进行分组并循环取每组排序后的前三只,合并到t数组中
    select t&=select drange(0 to 2)* from thisgroup order by ['zf'] desc end
    from arr group by ['hy'] end;
    return t;

    返回结果展示:


    其中:
    thisgroup:表示分组后的当前组,即是源数据的子集,由group by产生,需要用select子语句进行访问。
    select drange(0 to 2)* :表示取前3行,下标从0开始。
    t&= :表示将数组合并到t中。