Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Выборка с прореживанием по дате / 3 сообщений из 3, страница 1 из 1
20.04.2015, 22:03
    #38941092
twistfire
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка с прореживанием по дате
Доброго времени суток.

суть задачи - "проредить" данные, записанные в таблицу с нужным интервалом времени "прореживания" (например 10 мин).
(есть поле data_date timestamp)

в таблицу пишутся данные от датчика (ретроспективно). Может писаться неравномерно по времени - например за час может быть 10 значений, а может и не быть вовсе, а потом и все 100 значений за следующий час..

Нужно выбрать данные за некоторый период, но не все - а скажем чтобы каждая последующая запись была не менее чем через ХХ минут от предыдущей.

Как сделать это шустрее и чтобы итоговые результаты запроса были максимально на равные промежутки времени разнесены?
т.е. скажем промежуток времени между соседними записями был максимально близок к указанному интервалу (10 мин например).
(в таблице несколько миллионов записей и их число постоянно растет)
...
Рейтинг: 0 / 0
21.04.2015, 00:22
    #38941161
p2.
p2.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка с прореживанием по дате
twistfireмаксимально на равные промежутки времени разнесеныЕсли исходить из оптимальной минимизации ско по скользящей сетке, то эта задача на миллионах быстро не решается.
Исходить из жесткости критерия "не меньше", то здесь упрощенный start of group через оконные функции или рекурсию.
Более тривиальное, но при достаточной частоте событий малоотклоняющееся от оптимума решение - элементарная группировка по округлению к десяти минутам.
...
Рейтинг: 0 / 0
22.04.2015, 13:39
    #38942520
LeXa NalBat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка с прореживанием по дате
> Как сделать это шустрее
При наличии индекса по data_date попробуйте идею Быстрый подсчет distinct values по индексированным полям , Loose indexscan . Только вам нужно будет заменить условие "WHERE col > t.col" на "WHERE col > t.col + ХХ минут".

> чтобы итоговые результаты запроса были максимально на равные промежутки времени разнесены
А вот с этим вижу проблему. Разные комбинации выбираемых точек придется проверить. Какая из них "максимально равно разнесенная". Кстати, что это формально означает.
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Выборка с прореживанием по дате / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]