我有一个T-SQL函数可以在最近60分钟内将所有插入到主表中的记录插入到表变量中。然后我有更多的代码将过滤器设置为另一个表变量来返回。T-SQL - 删除除最近期间以外的所有重复项(SQL Server 2005)
在这个集合中,我期待一些记录有多个事件,但他们将有一个独特的日期时间。 我想删除每个大于或等于3次的记录,但保留最近的日期时间值。
编辑:对不起,我以为我比我看起来更清晰。
该数据是来自遗留系统的错误日志数据,因此可以预期有重复。这个想法是,如果他们跨越了一定的门槛,他们需要报告。
例如,下面的是什么应该@table_variable_2
结束:
| ColA | ColB | DateTimeColumn | ColC |
---------------------------------------------------
1 | A | B | 2015-08-24 11:06:14.000 | C |
2 | A | B | 2015-08-24 11:18:58.000 | C |
3 | A | B | 2015-08-24 12:07:45.000 | C |
4 | A2 | B2 | 2015-08-24 12:17:24.000 | C2 |
5 | A2 | B2 | 2015-08-24 13:25:32.000 | C2 |
6 | A3 | B3 | 2015-08-24 14:52:10.000 | C3 |
7 | A3 | B3 | 2015-08-24 14:52:34.000 | C3 |
8 | A3 | B3 | 2015-08-24 14:52:45.000 | C3 |
9 | A3 | B3 | 2015-08-24 14:53:15.000 | C3 |
10 | A3 | B3 | 2015-08-24 14:53:32.000 | C3 |
这是我期望返回:
| ColA | ColB | DateTimeColumn | ColC |
---------------------------------------------------
1 | A | B | 2015-08-24 12:07:45.000 | C |
2 | A2 | B2 | 2015-08-24 12:09:35.000 | C2 |
3 | A2 | B2 | 2015-08-24 13:25:32.000 | C2 |
4 | A3 | A3 | 2015-08-24 14:53:32.000 | C3 |
没关系有一些重复,但只是在有很多他们的机会。
编辑2:没有CTE功能
DELETE @rtrn_tbl FROM @rtrn_tbl
AS a
INNER JOIN
(
SELECT ColA, ColB, MAX(DateTimeColumn) AS MaxDate, ColC FROM @rtrn_tbl
GROUP BY ColA, ColB, ColC
HAVING COUNT(*) > 2
) AS b
ON a.ColA = b.ColA AND a.ColB=a.ColB and a.ColC = b.ColC
WHERE a.DateTimeColumn <> b.MaxDate;
示例数据和预期输出将会很有帮助。 'r_count> = 3'不会删除所有重复项。实际上这个查询仍然会导致重复记录 –
你是什么意思删除每个记录,但保留一个?你是否想要删除除最近一行以外的所有行,对于发生3次以上的行?这是不是很清楚你在这里做什么。 –