如何解决SQL Server - 从事件摘要中累积设备的唤醒时间
我正在使用 SQL 服务器(由 BMC 使用)来获取某些设备的正常运行时间。
我有一个查询显示如下结果:
| DeviceName | EventDate | EventType |
| ---------- | ----------------------- | ---------- |
| 1 | 2021-02-15 08:06:12.000 | getting up |
| 1 | 2021-02-12 15:07:26.000 | going down |
| 2 | 2021-02-16 08:12:54.000 | getting up |
| 2 | 2021-02-12 15:43:00.000 | going down |
| 3 | 2021-02-15 07:47:42.000 | getting up |
| 3 | 2021-02-12 15:38:41.000 | going down |
| 4 | 2021-02-15 08:10:07.000 | getting up |
| 5 | 2021-02-18 06:41:40.000 | getting up |
| ... | ... | ... |
我想要一个看起来像这样的结果:
| DeviceName | TotalUpTime (min) |
| ---------- | ----------------- |
| 1 | 16543 |
| 2 | 13639 |
| 3 | 13524 |
| 4 | 19235 |
| 5 | 12347 |
这是我当前的查询:
SELECT
DeviceName,EventDate,EventType
FROM **irrelevant complexe SELECT query**
ORDER BY DeviceName,EventDate DESC
任何帮助都会很好!!
提前多谢!
解决方法
SELECT
DeviceName,SUM(DATEDIFF(ms,EventDate,EndTime) / 60000.0) AS [TotalUpTime (min)]
FROM (
SELECT *,LEAD(CASE WHEN EventType = 'going down' THEN EventDate END,1,GETDATE()) OVER
OVER (PARTITION BY DeviceName ORDER BY EventDate) AS EndTime
FROM table
)
WHERE EventType = 'getting up' AND EndTime IS NOT NULL
GROUP BY DeviceName
,
解决方案:
好的,这对我有用:
SELECT
DeviceName,DATEDIFF(s,EndTime)/60 AS [TotalUpTime (min)]
FROM (
SELECT *,LEAD(CASE WHEN EventType = 32 THEN EventDate END,GETDATE())
OVER (PARTITION BY DeviceName ORDER BY EventDate) AS EndTime
FROM (
**Irrelevant SELECT query**
) r
) s
WHERE EventType = 16 AND EndTime IS NOT NULL
非常感谢@Charlieface,他的回答对我帮助很大。
希望有一天这对某人有所帮助,即使它非常具体。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。