FAQ > 金融建模 > 应用案例 > 指标或功能实现

Q:如何将第一列相同的数据进行去重处理    

简述
想对二维数组中,第一列出现重复的数据进行去重处理,用户通常容易误用表格去重操作distinct,结果发现没有效果。
其原因是,数据表中,除了第一列,还有后面的列数据,当第一列相同时,后面的列值内容却不一定都相同,而distinct它是对行相同的进行去重,并非是对某一列中相同值进行去重。
  • A:对于这种需求的数据处理,我们的思路应该是按去重目标列进行分组后,再按条件进行筛选出一行后进行数据重组。
    毕竟,多条不一样的数据,你只取一条,总需要有个逻辑来告诉程序,要选哪一条。
    比如有数据如下:
    ckeyAvalue
    A1
    A2
    B2
    B1
    C2
    C3
    C-1


    要求实现:['ckey']列中每个值只留一条记录,而留下的那条是所有记录中['Avalue']最小的那一条数据。

    实现代码:

      a:=array(
    ("ckey":"A","aValue":1),
    ("ckey":"A","aValue":2),
    ("ckey":"B","aValue":2),
    ("ckey":"B","aValue":1),
    ("ckey":"C","aValue":2),
    ("ckey":"C","aValue":3),
    ("ckey":"C","aValue":-1));
      t:=array(); //新定义一个数组
      //-按ckey列进行分组后,取按'aValue'的顺序排序后的第一行进行合并
      select t&=select drange(0 to 0)* from thisgroup order by ['aValue'] end as nil
      from a group by ['ckey'] end;
      return t;

    //返回结果:
    ckeyaValue
    A1
    B1
    C-1