我有一个审计日志表,针对一个业务对象记录来自多个表的更改。日志带有时间戳,单个业务对象的更新很可能会在一段时间内发生。换句话说,保存一份合同最多可能需要 5 秒,而在此期间添加或更新的记录将跨越该时间。从下表中,最后一列显示时间戳,值之间略有差异。
cm_contract 1087 2013-05-20 14:30:24.713
cm_contract 1087 2013-05-20 14:30:24.717
cm_contract 1087 2013-05-20 14:30:24.750
cm_contract 1087 2013-05-20 14:30:24.763
cm_contract 1087 2013-05-20 14:30:24.817
cm_contract 1087 2013-05-20 14:30:24.833
cm_contract 1087 2013-05-20 14:30:24.837
cm_contract 1087 2013-05-20 14:30:24.843
cm_contract 1087 2013-05-20 14:30:24.850
cm_contract 1087 2013-05-20 14:30:24.853
在查看器中,我想汇总数据,显示已更改的业务对象以及针对该业务对象的日志数量。为此,我需要按业务对象和键以及具有相似时间戳的记录对记录进行分组。我已经使用临时表和变量实现了这一点,但我最终想把它放到一个视图中,所以我想知道是否有更简单的方法来做到这一点:
SELECT ROW_NUMBER() OVER (ORDER BY business_object_table, business_object_key, mod_date) AS row_num,
audit_trail_key, business_object_table, business_object_key, mod_date, 0 AS part
INTO #temp
FROM audit_trail WHERE business_object_table is not null
DECLARE @part INT=0
UPDATE t2 SET @part = CASE WHEN ABS(DATEDIFF(millisecond, t2.mod_date, t1.mod_date)) < 1000 THEN @part ELSE @part + 1 END, part = @part
FROM #temp t2 INNER JOIN #temp t1 ON t2.row_num = t1.row_num +1
WHERE t2.business_object_table = t1.business_object_table
AND t2.business_object_key = t1.business_object_key
SELECT * FROM #temp
DROP TABLE #temp
我一直在寻找 T-SQL 中的效果
CLUSTER BY ABS(DATEDIFF(millisecond, t2.mod_date, t1.mod_date)) < 1000
但不断重定向到 SQL Server 故障转移集群,这不是我想要的。有人有想法么