我有一个表存储每个实体在任何时间点使用的总磁盘。我想找到一个时间段内使用的峰值磁盘。例如,数据看起来像
注意:时间戳是具有秒精度的实际时间戳,为简洁起见,我将其设置为上午 10 点等
timestamp | entity_id | disk_used
---------------------------------
9am | 1 | 10
10am | 2 | 20
11am | 2 | 15
12am | 1 | 12
在此示例中,使用的最大磁盘为 30(实体 1 为 10,实体 2 为 20)。
我尝试了多种方法。
- Sum of (max of each entity) 不起作用,因为它会给出结果 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 兼容。
- 重新表述同一个问题,在每个时间戳我们都有数据点,用于该时刻使用的总磁盘。要查找该时刻使用的总磁盘总量,请将每个实体的最后一个值相加。
有没有一种有效的方法来计算这个?