支持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可以简单地解决以前很麻烦的需求