我想创建一个为我提供随机值的序列。两个顺序调用应给出相似的值,这些值仅相差一点点(最大STEP)。就是说我想制作一个在随机方向上平滑变化的值序列。
我做了一个简单的功能,可以实现我想要的功能。但是问题是-它不能存储以前的值。
CREATE OR REPLACE FUNCTION smooth_random_integer(VAL INTEGER, STEP INTEGER, MIN INTEGER, MAX INTEGER) RETURNS INTEGER
AS
$rand_smooth_integer$
BEGIN
VAL := VAL + floor(random() * (STEP * 2 + 1) - STEP);
IF VAL > MAX THEN
RETURN MAX;
ELSIF VAL < MIN THEN
RETURN MIN;
END IF;
RETURN VAL;
END;
$rand_smooth_integer$ LANGUAGE plpgsql;
这意味着下面的插入产生非常相似的值,总是非常接近INITIAL变量。
INSERT INTO datapoint_values (ts, int_value)
(SELECT ts, smooth_random_integer(INITIAL, STEP, MIN, MAX)
FROM generate_series(TIMESTAMP_START, TIMESTAMP_END, TS_STEP) as ts);
如何重写代码以获得所需的输出?
我有个使用序列的想法。
postgresql序列的问题是它们1)具有稳定的已定义步骤,2)总是递增或递减。
有什么方法可以做我想要的吗?也欢迎使用除序列以外的其他工具。
编辑1:
MIN,MAX,STEP和INITIAL在脚本的开头定义。他们是整数。例如0、100、2、40。
generate_series(...)给出一个表,该表使用已定义的步骤TS_STEP从TIMESTAMP_START到TIMESTAMP_END生成时间戳。