Как выбрать фиксированное количество равномерно распределенных строк в базе данных sqlite timeseries - PullRequest
1 голос
/ 27 мая 2020

У меня есть база данных временных рядов (показания температуры / погоды) в базе данных SQLite. Выборка одной точки данных в минуту даст мне полмиллиона точек в год, и при построении графиков на длительных временных интервалах было бы лучше подвыборку точек, чтобы распределить их равномерно.

Если я хочу запросить свою базу данных и получить максимум 1000 баллов, как я могу это сделать? Соответствующие столбцы: (id INTEGER PRIMARY KEY, value REAL, timestamp INTEGER).

Если набралось меньше 1000 очков, я хочу получить все. Если их больше, я хочу получить 1000 строк, которые имеют (приблизительно) одинаковую продолжительность между двумя.

Этот вопрос делает что-то подобное, но, похоже, не работает в SQLite, только PostgreSQL.

1 Ответ

1 голос
/ 27 мая 2020

Сначала проверьте, сколько у вас строк:

SELECT COUNT(*) FROM data

если их меньше 1000, выполните простую команду SELECT. Если не сделать:

SELECT * FROM data WHERE (ROWID-1) % (SELECT COUNT(*)/1000 FROM data) = 0

, он вернет 1000 строк, чтобы они были равномерно распределены. Если вы хотите, чтобы последняя строка также была включена, добавьте OR ROWID = (SELECT COUNT(*) FROM data) в конец приведенной выше команды.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...