sql-server - 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,
DATEDIFF(s, EventDate, EndTime)/60 AS [TotalUpTime (min)]
FROM (
SELECT *,
LEAD(CASE WHEN EventType = 32 THEN EventDate END, 1, 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,他的回复对我帮助很大。
希望有一天这对某人有所帮助,即使它非常具体。
推荐阅读
- python - pd.date_range() 函数中是否有组合频率参数?
- c - 为什么在更改循环条件时会出现分段错误?
- javascript - 为什么 Google App 引擎不使用 Node.js 释放内存
- spring-security - 如何从 loadUserByUsername 方法中获取 HttpSession?
- credentials - 有没有办法使用不同的交换帐户在蓝色棱镜中发送电子邮件?
- matlab - 从 fdatool IIR 滤波器对象中提取滤波器系数
- amazon-web-services - 你能在“Fn::Sub”中嵌套“Fn::FindInMap”吗?
- python - 转义包含降价 URL 的字符串中的下划线字符
- javascript - 如何计算点击可拖动画布元素的位置?
- r - 计算数据框中因子变量的数量