【发布时间】:2012-06-25 10:12:48
【问题描述】:
请帮助我生成以下我一直在努力解决的查询。假设我有一个简单的表格,其中包含月份编号以及该特定月份是否有任何失败事件的信息
生成示例数据的脚本如下:
WITH DATA(Month, Success) AS
(
SELECT 1, 0 UNION ALL
SELECT 2, 0 UNION ALL
SELECT 3, 0 UNION ALL
SELECT 4, 1 UNION ALL
SELECT 5, 1 UNION ALL
SELECT 6, 0 UNION ALL
SELECT 7, 0 UNION ALL
SELECT 8, 1 UNION ALL
SELECT 9, 0 UNION ALL
SELECT 10, 1 UNION ALL
SELECT 11, 0 UNION ALL
SELECT 12, 1 UNION ALL
SELECT 13, 0 UNION ALL
SELECT 14, 1 UNION ALL
SELECT 15, 0 UNION ALL
SELECT 16, 1 UNION ALL
SELECT 17, 0 UNION ALL
SELECT 18, 0
)
鉴于“重复失败”的定义:
如果在任何 6 个月期间至少 4 个月内发生事件失败,那么最后一个月出现此类失败是“重复失败”,我的查询应返回以下输出
Month Success RepeatedFailure
1 0
2 0
3 0
4 1
5 1
6 0 R1
7 0 R2
8 1
9 0
10 1
11 0 R3
12 1
13 0
14 1
15 0
16 1
17 0
18 0 R1
在哪里:
- R1 第 6 个月的第 -1 次重复故障(过去 6 个月内有 4 次故障)。
- R2 第 7 个月第 2 次重复失败(过去 6 个月内出现 4 次失败)。
- R3 第 11 个月 -3 次重复失败(过去 6 个月内失败 4 次)。
R1 - 在第 18 个月再次出现第 1 次重复故障,因为在过去 6 个报告周期中第一次发生新的重复故障时,重复故障应从头开始重新编号
重复失败是连续计算的,因为我必须根据它的数量应用适当的乘数:
- 第一次重复失败 - X2
- 第二次重复失败 - X4
- 第三次及多次重复失败 -X5。
【问题讨论】:
-
什么版本的 SQL Server?与 2005-2008 相比,2012 具有额外的排名功能。
-
您好,我们使用的是 SQL Server 2008
-
我已经编辑了您的数据以(我认为)修复它 - 如果我犯了错误,请进一步编辑
-
好的,现在他们是正确的,谢谢 AakashM
-
考虑 6-12 个月。如果交换 11 和 12 的成功值,那么 12 会被标记为 R2 还是 R3? (我可以看到它要么是 - R2,因为它在过去 6 个月内只有一次重复失败,要么是 R3,因为之前的失败被标记为 R2)。
标签: sql sql-server sql-server-2008 tsql ranking-functions