如何计算同一个表内时间戳之间的平均差异?

问题描述 投票:0回答:1

我在 New Relic 表中的数据如下:

id 时间戳 状态
A 2024-12-01 11:36:00 开始处理步骤1
B 2024-12-01 11:37:00 开始处理步骤1
B 2024-12-01 11:38:00 开始处理步骤2
A 2024-12-01 12:01:00 开始处理步骤2
C 2024-12-01 12:36:00 开始处理步骤1
C 2024-12-01 12:41:00 开始处理步骤2
B 2024-12-01 13:36:00 开始处理步骤3
A 2024-12-01 13:46:00 开始处理步骤3
C 2024-12-01 13:56:00 开始处理步骤3

处理时间定义为从最后一步(步骤3)到第一步(步骤1)所经过的时间。

我想找到所有进程 ID 的平均处理时间

因此,对于进程 A,它将是

2024-12-01 13:46:00 - 2024-12-01 11:36:00 = 2:10
,并且对进程 B 和 C 进行类似的计算。现在我正在寻找这些处理时间的平均值。

如何在 NewRelic 中实现这一点?

sql newrelic nrql
1个回答
0
投票

过程的持续时间可以计算为 max(time)-min(time)。 然后按所有进程的持续时间进行分组并计算平均值。

参见示例(针对 SQL Server)

id 时间戳 状态
A 2024-12-01 11:36:00.000 开始处理步骤1
B 2024-12-01 11:37:00.000 开始处理步骤1
B 2024-12-01 11:38:00.000 开始处理步骤2
A 2024-12-01 12:01:00.000 开始处理步骤2
C 2024-12-01 12:36:00.000 开始处理步骤1
C 2024-12-01 12:41:00.000 开始处理步骤2
B 2024-12-01 13:36:00.000 开始处理步骤3
A 2024-12-01 13:46:00.000 开始处理步骤3
C 2024-12-01 13:56:00.000 开始处理步骤3
select id,min(timestamp) fromtime,max(timestamp) totime
  ,max(timestamp)-min(timestamp) duration
from test
group by id

Putput - 每个进程的持续时间

id 来自时间 到时候 持续时间
A 2024-12-01 11:36:00.000 2024-12-01 13:46:00.000 1900-01-01 02:10:00.000
B 2024-12-01 11:37:00.000 2024-12-01 13:36:00.000 1900-01-01 01:59:00.000
C 2024-12-01 12:36:00.000 2024-12-01 13:56:00.000 1900-01-01 01:20:00.000
select count(*) cnt
  ,cast(cast(avg(cast(duration as float)) as datetime) as time) as avgduration
from(
select id,min(timestamp) fromtime,max(timestamp) totime
  ,max(timestamp)-min(timestamp) duration
from test
group by id
)x
cnt 平均持续时间
3 01:49:40.0000000

小提琴

© www.soinside.com 2019 - 2024. All rights reserved.