CREATE OR REPLACE FUNCTION fun_addrow_index(index NUMERIC,o_rate NUMERIC,t_rate NUMERIC)
RETURNS VARCHAR AS $$
DECLARE
result_list VARCHAR;
res_gbs NUMERIC;
max int ;
times int;
res_tmp NUMERIC;
max_index NUMERIC;
min_index NUMERIC;
BEGIN
--先计算两采样率最小公倍数
BEGIN
IF o_rate > t_rate THEN
max=o_rate;
ELSE
max=t_rate;
END IF;
times=max;
while times>=t_rate LOOP
IF(times%o_rate=0 and times%t_rate=0) then
res_gbs=times;
EXIT ;
END IF;
times=times+1;
END LOOP;
END;
BEGIN
--计算采样率对齐后每行数据的index
select CEILING(((index-1)*(res_gbs/o_rate)+1)/(res_gbs/t_rate)) into min_index;
select FLOOR((index*(res_gbs/o_rate))/(res_gbs/t_rate))into max_index;
END;
IF min_index=max_index THEN
return min_index;
ELSE
res_tmp=min_index;
result_list=min_index;
while max_index>res_tmp LOOP
res_tmp=res_tmp+1;
result_list=result_list||','||res_tmp;
END LOOP;
return result_list;
END IF;
END;
$$
LANGUAGE plpgsql