TSL语言基础 > SQL基础到TS-SQL > TS-SQL进阶

RefMaxOf,RefMinOf引用最大最小的行    

  • 支持refmaxof,refminof聚集函数来获取最大值与最小值对应行的其它列的值,需在使用了maxof或者minof之后使用。
    使用范例:
    a:=array((1,2),(4,3),(2,5));
    return select maxof([0]),refmaxof([1]) from a end; //访问最大值所在行的[1]的值。
    //返回结果集为:array(("Expr1":4.0,"Expr2":3))


    当在一条SQL里使用了多个MaxOf或MinOf会导致RefMaxOf或RefMinof无法确切知道引用哪条记录。这个时候,就要配合缓存的标识符。
    MaxOf、MinOf的缓存标识串中,如果<MAXMIN=IdString/>格式,那么这个标志就是IdString,这样我们可以在RefMaxOf、RefMinof中来使用标志串,例如:
    t:=array((85,84),(82,86),(7,4),(4,45),(20,54),
    (8,92),(87,35),(7,17),(12,49),(11,15));
    return Select MaxOf([0],true,nil,true,"<MAXMIN=id0/>") as "0列最大值",
        MaxOf([1],true,nil,true,"<MAXMIN=id1/>") as "1列最大值",
        MinOf([0],true,nil,true,"<MAXMIN=id3/>") as "0列最小值",
        MinOf([1],true,nil,true,"<MAXMIN=id4/>") as "1列最小值",
        refMaxOf([1],"id0") as "0列最大值对应的1例值",
        refMaxOf([0],"id1") as "1列最大值对应的0例值",
        refMinOf([1],"id3") as "0列最小值对应的1例值",
        refMinOf([0],"id4") as "1列最小值对应的0例值"
      from t end;

    返回结果:

    如果存在子查询,结合RefsOf使用,RefMaxOf,RefMinOf可以简单地解决以前很麻烦的需求