[英]SQL query summary report groupby status and calculate difference time
Hi all i need show some report, but i don't have solution for this result. 大家好,我需要显示一些报告,但是我没有针对此结果的解决方案。 Please help me guide solution for Query this result.
请帮助我指导查询此结果的解决方案。
This is my table (log) 这是我的桌子(日志)
I need to write SQL query to generate the following results: 我需要编写SQL查询来生成以下结果:
Please guide me, Thank you all answers. 请指导我,谢谢所有答案。
This is an Island and Gaps problem which can be solved by using ROW_NUMBER
: 这是一个孤岛和缺口问题,可以使用
ROW_NUMBER
解决:
;WITH Cte AS(
SELECT *,
grp = ROW_NUMBER() OVER(PARTITION BY NODE, STATUS ORDER BY DATE_TIME)
- ROW_NUMBER() OVER(PARTITION BY NODE, STATUS, VALUE ORDER BY DATE_TIME)
FROM [Log]
),
CteMinMax AS(
SELECT
NODE,
STATUS,
VALUE,
MIN_DATE_TIME = MIN(DATE_TIME),
MAX_DATE_TIME = MAX(DATE_TIME)
FROM Cte
GROUP BY
NODE, STATUS, VALUE, grp
)
SELECT
NODE,
STATUS,
VALUE,
[Begin Failed] = cmm.MIN_DATE_TIME,
[Last OK] = x.MIN_DATE_TIME,
[Time/Minute] = DATEDIFF(MINUTE, cmm.MIN_DATE_TIME, x.MIN_DATE_TIME)
FROM CteMinMax cmm
CROSS APPLY(
SELECT TOP 1 MIN_DATE_TIME
FROM CteMinMax
WHERE
NODE = cmm.NODE
AND STATUS = cmm.STATUS
AND VALUE = 0
AND MIN_DATE_TIME > cmm.MIN_DATE_TIME
) x
WHERE cmm.VALUE = 1
RESULT 结果
| NODE | STATUS | VALUE | Begin Failed | Last OK | Time/Minute |
|------|----------------|-------|----------------------------|----------------------------|-------------|
| A | SQL Connection | 1 | December, 02 2015 14:02:00 | December, 02 2015 14:04:00 | 2 |
| A | SQL Connection | 1 | December, 02 2015 14:05:00 | December, 02 2015 14:08:00 | 3 |
| A | SQL Connection | 1 | December, 02 2015 14:12:00 | December, 02 2015 14:15:00 | 3 |
| A | SQL Connection | 1 | December, 02 2015 14:17:00 | December, 02 2015 14:18:00 | 1 |
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.