【发布时间】:2021-05-18 16:54:49
【问题描述】:
我有一个包含大量行的表。它具有时间戳(以毫秒为单位)、值和 siteId(外键)之类的列。我想以 8 小时的时间戳间隔从最近三个月的数据中获取数据,并且我想在三个月的时间戳中获取所有 siteId 的数据。每个siteId每5分钟就有一次数据。如果我获取过去三个月的数据,它将以数百万计。所以我想每8小时采集一次数据。有时,也可能存在间隙,因此如果 siteId 在第 8 小时内不存在,它应该获取下一个数据,可能是第 8 小时过去 5 分钟(或过去 10 分钟......)。
很难为此创建查询,之后正常获取和按摩数据需要时间。
我正在使用 postgres、java 和 JPA。如果我可以通过查询或通过一些 JPA 实用程序来减轻 CPU 负担?我想将花费的时间(现在每个查询 9 秒)减少到最少。你们能帮帮我吗?提前致谢
我的表结构:
| timestamp | value | siteId |
|----------------|-------|--------|
| 1610370000000 | 22 | 123 |
| 1610370700000 | 21 | 123 |
| 1610370028000 | 22 | 123 |
| 1610369889000 | 23 | 123 |
| 1610370000000 | 22 | 124 |
| 1613534400000 | 21 | 124 |
| 1610369889000 | 22 | 124 |
| 1610370005000 | 23 | 125 |
因此,每个站点每 5 分钟就有一次数据。我想要最近三个月的数据,每个站点的间隔至少为 8 小时。希望这会有所帮助
【问题讨论】:
-
请添加一些示例数据、表结构和所需的输出。这将有助于了解您的问题。创建查询并不难。您可以使用online tools 进行演示
-
至少 8 小时的间隔是什么意思?
-
以防万一它对你有用。 postgresqltutorial.com/postgresql-rank-function 。不知何故,您需要创建分区并使用该分区中的第一个元素。
-
@GordonLinoff 我拥有的数据间隔为 5 分钟(网站每 5 分钟向我发送一次数据),我想从同一个表中获取数据,每 8 小时读取一次数据.
-
这些结果会是什么样子?
标签: java sql postgresql spring-data-jpa