【发布时间】:2021-02-28 05:58:57
【问题描述】:
我有一个表,用于存储每个实体在任何时间点使用的总磁盘数。我想找到一个时间段内使用的峰值磁盘。 例如,数据看起来像
注意:时间戳是具有秒精度的实际时间戳,为简洁起见,我将其设置为上午 10 点等
timestamp | entity_id | disk_used
---------------------------------
9am | 1 | 10
10am | 2 | 20
11am | 2 | 15
12am | 1 | 12
在本例中,使用的最大磁盘数为 30(实体 1 为 10,实体 2 为 20)。
我尝试了很多方法。
- (每个实体的最大值)的总和不起作用,因为它会给出结果 20 + 12 = 32。但在实体 1 增加其大小之前,实体 2 减小了大小,因此峰值磁盘使用量为 30 .
- 我尝试使用窗口函数找到每个实体的last_value之和
select timestamp, entity_id,
disk_used,
sum(last_value(disk_used) over(
partition by entity_id order by timestamp)
) sum_of_last
正在尝试生成,因此我可以将其最大化,
timestamp | entity_id | disk_used | sum_of_last
-----------------------------------------------
9am | 1 | 10 | 10
10am | 2 | 20 | 30
11am | 2 | 15 | 25 // (10 + 15)
12am | 1 | 12 | 27 // (12 + 15)
但是,该查询不起作用,因为我们无法通过 ISO 标准 SQL 2003 中的窗口函数进行聚合。我正在使用 Amazon timestream db。查询引擎与 ISO 标准 SQL 2003 兼容。
-- 重新表述相同的问题,在每个时间戳我们都有数据点,用于该时刻使用的总磁盘。 要找到当时使用的总磁盘总量,请将每个实体的最后一个值相加。
有没有一种有效的方法来计算这个?
【问题讨论】:
-
(1) SQL 2003?请标记您正在使用的数据库。 (2) 你想要什么结果?
-
我们使用 amazon timestream,它是来自 amazon 的新时间序列数据库。我听到的查询与SQL 2003兼容。(并且有一些附加功能)
-
。 .也许引用的是 ISO 标准 SQL 2003。如果没有引用,只是“sql 2003”似乎很尴尬。
标签: sql sum time-series aggregate-functions amazon-timestream