Mysql 如何通过状态比较时间戳来计算正常运行率
我有一个记录http调用的表。我的桌子是这样的: 调用时间戳 httpStatus 端点 2021-04-01 06:00:00 200 https://someserver/someapi/v1/endpoint1 2021-04-01 10:21:11 200 https://someserver/someapi/v1/endpoint1 2021-04-01 10:25:00 500 https://someserver/someapi/v1/endpoint1 2021-04-01 11:33:15 200 https://someserver/someapi/v1/endpoint1 2021-04-01 11:34:31 200 https://someserver/someapi/v1/endpoint1 2021-04-01 11:35:22 500 https://someserver/someapi/v1/endpoint1 2021-04-01 12:22:54 200 https://someserver/someapi/v1/endpoint1 2021-04-01 10:21:11 200 https://someserver/someapi/v1/endpoint2 2021-04-01 10:25:32 500 https://someserver/someapi/v1/endpoint2 2021-04-01 10:59:12 200 https://someserver/someapi/v1/endpoint2 您可以使用Mysql 如何通过状态比较时间戳来计算正常运行率,mysql,sql,mysql-8.0,Mysql,Sql,Mysql 8.0,我有一个记录http调用的表。我的桌子是这样的: 调用时间戳 httpStatus 端点 2021-04-01 06:00:00 200 https://someserver/someapi/v1/endpoint1 2021-04-01 10:21:11 200 https://someserver/someapi/v1/endpoint1 2021-04-01 10:25:00 500 https://someserver/someapi/v1/endpoint1 2021-04-01 11
lead()over()
计算下一个callTimestamp
和min()over()
窗口函数选择最小callTimestamp
。然后,通过分组和聚合,您可以获得所需的内容
架构和插入语句:
create table mytable(callTimestamp datetime, httpStatus int, endpoint varchar(100));
insert into mytable values('2021-04-01 10:21:11',200, 'https://someserver/someapi/v1/endpoint1');
insert into mytable values('2021-04-01 10:25:00',500, 'https://someserver/someapi/v1/endpoint1');
insert into mytable values('2021-04-01 11:33:15',200, 'https://someserver/someapi/v1/endpoint1');
insert into mytable values('2021-04-01 11:34:31',200, 'https://someserver/someapi/v1/endpoint1');
insert into mytable values('2021-04-01 11:35:22',500, 'https://someserver/someapi/v1/endpoint1');
insert into mytable values('2021-04-01 12:22:54',200, 'https://someserver/someapi/v1/endpoint1');
insert into mytable values('2021-04-01 10:21:11',200, 'https://someserver/someapi/v1/endpoint2');
insert into mytable values('2021-04-01 10:25:32',500, 'https://someserver/someapi/v1/endpoint2');
insert into mytable values('2021-04-01 10:59:12',200, 'https://someserver/someapi/v1/endpoint2');
查询:
select endpoint, 100*(TIME_TO_SEC(TIMEDIFF(NOW(), max(mincalltime)))-sum(TIME_TO_SEC(TIMEDIFF(nexttime, calltimestamp))))/ TIME_TO_SEC(TIMEDIFF(NOW(), max(mincalltime))) uptimeRate
from
(select *,lead(calltimestamp)over (partition by endpoint order by calltimestamp)nexttime,
min(calltimestamp)over(partition by endpoint order by calltimestamp) mincalltime
from mytable
)t
where httpstatus=500
group by endpoint
输出:
端点
升华
https://someserver/someapi/v1/endpoint1
98.8895
https://someserver/someapi/v1/endpoint2
99.6771