如何在timeseries sqlite数据库中选择固定数量的均匀分布行

如何在timeseries sqlite数据库中选择固定数量的均匀分布行,sqlite,Sqlite,我在SQLite数据库中有一个时间序列数据温度/天气读数数据库。每分钟采样一个数据点每年将为我提供50万个点,当在长时间跨度上绘制时,最好对这些点进行二次采样,以便均匀分布 如果我想查询我的数据库并获得最多1000点积分,我该怎么做?相关列为id INTEGER主键、value REAL、timestamp INTEGER 如果分数低于1000分,我想得到所有分数。如果还有更多,我想得到1000行,它们之间的持续时间大约相等 执行类似操作,但在SQLite中似乎不起作用,只有PostgreSQL

我在SQLite数据库中有一个时间序列数据温度/天气读数数据库。每分钟采样一个数据点每年将为我提供50万个点,当在长时间跨度上绘制时,最好对这些点进行二次采样,以便均匀分布

如果我想查询我的数据库并获得最多1000点积分,我该怎么做?相关列为id INTEGER主键、value REAL、timestamp INTEGER

如果分数低于1000分,我想得到所有分数。如果还有更多,我想得到1000行,它们之间的持续时间大约相等


执行类似操作,但在SQLite中似乎不起作用,只有PostgreSQL。

首先检查您有多少行:

SELECT COUNT(*) FROM data
如果少于1000,则执行简单的选择命令。如果没有:

SELECT * FROM data WHERE (ROWID-1) % (SELECT COUNT(*)/1000 FROM data) = 0
它将返回1000行,以便它们的间距相等。
如果要将最后一行也包括在内,则添加或ROWID=选择COUNT*FROM data to the end of the super command。

这将在假设定期进行采样的情况下解决问题。更好的方法是查看时间戳并确保时间间隔均匀分布。但这可能是一个非常昂贵的操作。@Supernormal是的,在你文章的开头你说,你的气象站大约每分钟采集一次样本,所以我在假设每行之间的时间距离几乎相等的情况下写下了我的答案。如果我必须计算它们在时间上的差异,那么需要对数据库进行多个查询,这可能会降低性能。。。