POSTGRESQL random () всегда дает одно и то же значение для всей таблицы.Как это исправить? - PullRequest
2 голосов
/ 29 апреля 2019

Я хочу создать sql, который генерирует таблицу из 2 столбцов, где первая - это серия временных меток, а вторая - функция, предоставляющая значения. Например, здесь random(). Но случайная функция всегда дает мне одно и то же значение для всей таблицы, я хочу другое. Как это исправить?

SELECT * FROM generate_series('2008-03-01 00:00'::timestamp,
                              '2008-03-05 12:00',
                              '1 day') as ts, random() as value;

Сгенерированная таблица:

"2008-03-01 00:00:00";0.816707271616906
"2008-03-02 00:00:00";0.816707271616906
"2008-03-03 00:00:00";0.816707271616906
"2008-03-04 00:00:00";0.816707271616906
"2008-03-05 00:00:00";0.816707271616906

1 Ответ

5 голосов
/ 29 апреля 2019

Переместить вызов random() в список выбора:

SELECT ts.*, random() as value
FROM generate_series('2008-03-01 00:00'::timestamp,
                     '2008-03-05 12:00',
                     '1 day') as ts;

Если поместить его в предложение FROM, оно оценивается только один раз.

...