如何在PostgreSQL的statuses表聚合任意时间范围时序数据,结果不超100行
问题描述
表statuses包含3个字段:
- id(uuid类型,主键)
- time(带时区的时间戳类型,非空)
- duration(整数类型,非空)
表中记录分布不均,某天可能仅1条记录,另一天可能有数千条。我需要对任意时间范围的duration字段做平均值聚合,且返回结果的记录数不超过100条。若按天或小时分组会很简单,但任意时间范围以及合适分组粒度的确定让我困惑。
示例
实际数据
| time | duration |
|---|---|
| 2023-06-30 03:49:43+00 | 96 |
| 2023-06-30 03:51:25+00 | 132 |
| 2023-06-30 03:51:55+00 | 124 |
| 2023-06-30 03:52:25+00 | 102 |
| 2023-06-30 03:52:55+00 | 119 |
| 2023-06-30 03:53:25+00 | 136 |
| 2023-06-30 03:53:55+00 | 92 |
| 2023-06-30 03:54:25+00 | 86 |
| 2023-06-30 03:54:55+00 | 99 |
| 2023-06-30 03:55:25+00 | 105 |
| 2023-06-30 03:55:55+00 | 94 |
| 2023-06-30 03:56:25+00 | 76 |
| 2023-06-30 03:56:55+00 | 77 |
| 2023-06-30 03:57:25+00 | 66 |
| 2023-06-30 03:57:55+00 | 80 |
| 2023-06-30 03:59:13+00 | 98 |
| 2023-06-30 03:59:43+00 | 201 |
| 2023-06-30 04:00:13+00 | 652 |
| 2023-06-30 04:00:43+00 | 154 |
| 2023-06-30 04:01:13+00 | 272 |
预期输出
假设希望最多返回10条结果(而非原问题中的100条),预期输出如下:
| time | duration |
|---|---|
| 2023-06-30 03:49:43+00 | 114 |
| 2023-06-30 03:51:55+00 | 113 |
| 2023-06-30 03:52:55+00 | 127.5 |
| 2023-06-30 03:53:55+00 | 89.0 |
| ...6 more rows |
内容的提问来源于stack exchange,提问作者Aditya
相关产品推荐
相关产品推荐

