Добрый день.
Есть таблица, содержит 2-е основные колонки дата, место. Данных очень много. Вывожу на графике изменения места во времени, иногда необходимо отобразить за все время(месяц, каждые 30 секунд идет insert в базу). Необходимо фильтровать данные при выводе.
CREATE TABLE public.example
(
id integer NOT NULL DEFAULT nextval('example_id_seq'::regclass),
datetime timestamp without time zone,
spase integer,
CONSTRAINT example_pkey PRIMARY KEY (id)
)
"2017-02-21 09:07:55";10
"2017-02-21 09:08:10";10
"2017-02-21 09:08:25";20
"2017-02-21 09:08:40";30
"2017-02-21 09:08:55";31
"2017-02-21 09:08:55";31
......................................
Алгоритм вижу такой-
1)сортируем данные по дате( сначала "свежые" данные)
2)Выбираем по пять значений (или более) и вычисляем среднее значение т.е (10+10+20+30+31)/5 и так далее, до конца
3) дату также берем среднюю между 2017-02-21 09:07:55 ---2017-02-21 09:08:55 и т.д
Соответственно имеем гораздо(зависит от того по сколько мы группировали) меньше точек на графике
Ни как не получается сгруппировать данные по 5-ть и усреднить.
Подскажите пожалуйста как это сделать?
Я допустим могу отфильтровать дубли, но это будет не правильно...
WITH
dat AS (
select DISTINCT ON (Spase) DateTime, Spase from public.example
order by Spase desc
)
select * from dat
order by DateTime desc
Можно выбрать значения кратные 5, но это тоже не то...
select * from public.example
where id%10=0
На вашем месте. я бы первым
На вашем месте. я бы первым делом создал индекс на поле datetime иначе очень быстро тормоза начнутся.
Далее всё зависит от степени детализации.
Есть агрегатная функция AVG. Группировать строки можно по времени, например за месяц по часам, т.е. из поля datetime извлекать часть "дата-час" с помощью функции преобразования даты-времени и считать среднее значение за час с помощью AVG. Ну и т.д.
А как на счет
А как на счет максимального/минимального даты_времени для каждой точки?
А как насчёт документацию
А как насчёт документацию почитать?
Есть и другие агрегатные функции.
Alarm, вы-то точно должны это знать, судя по ответам на форуме вы уже опытный пользователь.
Другие конечно есть. Судя по
Другие конечно есть. Судя по постановке задачи, там все равно какую функцию использовать.