Я хочу сделать последовательность, которая дает мне случайные значения.Два последовательных вызова должны давать одинаковые значения, которые немного отличаются (с максимальным 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;
Это означает, что вставка ниже дает очень похожие значения, всегда очень близко к исходной переменной.
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) всегда инкрементные или всегдадекремент.
Есть ли способ сделать то, что я хочу?Также приветствуются другие инструменты, кроме последовательностей.
Edit 1:
MIN, MAX, STEP и INITIAL определяются в начале скрипта.Они целые.Например, 0, 100, 2, 40.
generate_series (...) дает таблицу, которая производит метки времени от TIMESTAMP_START до TIMESTAMP_END с определенным шагом TS_STEP.