我有一个棘手的 SQL 问题。这是基于 SQL Server 2008 R2。
从 Log 表中,我必须合并具有相同消息的连续记录 ( MSG
),计算合并的消息数 ( COUNT
),然后删除重复的消息。这也需要在一个日期范围内完成,以便该范围之外的任何记录都不会受到影响。
为了使这更容易理解,这里是数据的一个小例子:
ID DATE MSG COUNT
1 2013-08-17 mail NULL
2 2013-08-17 mail NULL
3 2013-08-17 www NULL
4 2013-08-18 www NULL
5 2013-08-18 www NULL
6 2013-08-18 www NULL
7 2013-08-18 mail NULL
8 2013-08-18 www NULL
9 2013-08-19 mail NULL
10 2013-08-19 mail NULL
11 2013-08-20 mail NULL
12 2013-08-20 mail NULL
13 2013-08-21 www NULL
14 2013-08-22 mail NULL
15 2013-08-22 mail NULL
16 2013-08-23 mail NULL
17 2013-08-23 mail NULL
18 2013-08-23 mail NULL
结果应如下所示:
ID DATE MSG COUNT
1 2013-08-17 mail NULL
2 2013-08-17 mail NULL
3 2013-08-17 www NULL
6 2013-08-18 www 3
7 2013-08-18 mail 1
8 2013-08-18 www 1
12 2013-08-20 mail 4
13 2013-08-21 www 1
15 2013-08-22 mail 2
16 2013-08-23 mail NULL
17 2013-08-23 mail NULL
18 2013-08-23 mail NULL
所以,基本上,查询应该
- 仅处理给定日期范围内的数据(在此示例中为 from
2013-08-18
to2013-08-22
) - 根据
MSG
字段的文本组合连续的行 - 计算组合数据并在
COUNT
字段中设置值 - 删除重复记录(在此示例中,例如 ID 6 保留,但 ID 5 和 ID 4 应删除)
由于我不是 SQL 专家,因此我非常感谢任何帮助、建议或 SQL 查询。