对 SQL 查询中的分割范围求和
我有一个包含我的服务器状态的表,
create table ServerStatus
(
ServerId int,
StartTime datetime,
Seconds int,
[State] char(8)
)
我想要一个给定开始和结束日期的查询将总结服务器在此期间在每个状态下花费的时间。 我还希望查询返回服务器处于未知状态的时间量。
因此,例如为以下数据
1 2008-01-01 00:00:00.000 120 broken
1 2008-01-02 00:00:00.000 120 off
1 2008-01-03 00:00:00.000 240 burning
1 2008-01-04 00:00:00.000 60 off
1 2008-01-05 00:00:00.000 60 off
2 2008-01-01 00:00:00.000 60 broken
2 2008-01-02 00:00:00.000 30 off
2 2008-01-03 00:00:00.000 20 burning
2 2008-01-04 00:00:00.000 600 off
3 2007-01-04 00:00:00.000 600 off
4 2007-12-12 00:00:00.000 999999999 onfire
提供了范围。
select @start = dateadd(second, 60, '2008-01-01'),
@fin = dateadd(second, 60, '2008-01-04')
我想返回结果:
1 broken 60
1 burning 240
1 off 180
1 unknown 258720
2 burning 20
2 off 90
2 unknown 259090
4 onfire 259200
这个问题与以下内容有些相关:组合SQL 查询中的分割日期范围
I have a table which contains my server status
create table ServerStatus
(
ServerId int,
StartTime datetime,
Seconds int,
[State] char(8)
)
I would like a query that given a start and end date will summarize the time the server spends in each state during that time. I would also like the query to return the amount of time the servers spend in an unknown state.
So, for example for the following data
1 2008-01-01 00:00:00.000 120 broken
1 2008-01-02 00:00:00.000 120 off
1 2008-01-03 00:00:00.000 240 burning
1 2008-01-04 00:00:00.000 60 off
1 2008-01-05 00:00:00.000 60 off
2 2008-01-01 00:00:00.000 60 broken
2 2008-01-02 00:00:00.000 30 off
2 2008-01-03 00:00:00.000 20 burning
2 2008-01-04 00:00:00.000 600 off
3 2007-01-04 00:00:00.000 600 off
4 2007-12-12 00:00:00.000 999999999 onfire
Provided the range.
select @start = dateadd(second, 60, '2008-01-01'),
@fin = dateadd(second, 60, '2008-01-04')
I would like to return the results:
1 broken 60
1 burning 240
1 off 180
1 unknown 258720
2 burning 20
2 off 90
2 unknown 259090
4 onfire 259200
This question is somewhat related to: Combining split date ranges in a SQL query
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
这是迄今为止我想到的最好的:
This is the best I have come up with so far: