SQL Server日期时间和数据冗余

时间:2015-09-29 09:19:42

标签: sql sql-server datetime threshold redundancy

我们有一个故障表,其中包含一个数据类型为DATE_ACTIVE的列datetime2(7)。此列中的值如下:

2015-08-16 05:02:46.0000000
2015-08-16 05:13:25.0000000

我们需要从此表中获取活动超过10分钟的记录(故障)并将其推送到另一个表中,该表驱动指示活动 - 关闭事务的仪表板。我们在此表中有另一列,指示错误的状态(ACTIVECLOSED)。

我们决定继续实现这一目标:

select * 
from table 
where 
     CONVERT( float , CONVERT( datetime , getdate() ) 
     - CONVERT( datetime , DATE_ACTIVE ) ) * 24 * 60 * 60 > 600

即使记录将其状态从活动状态更改为关闭状态并返回活动状态,此表也会保留记录。因此,没有唯一的ID,因为每次从关闭转换 - 活动或反之亦然插入新行。此表保留所有行,不从此表中删除任何内容。所以上面提到的方法为我们提供了冗余数据。

例如:每天上午10点10分后上午10点插入的状态为CLOSED的记录会被推送到下一个表格,因为上述条件总是令人满意,直到该行的生命周期。

有没有办法阻止这种情况?

1 个答案:

答案 0 :(得分:0)

简短回答,除非您没有指示性列,否则您无法果断地说,仪表板表中的两个记录是两个单独的实例或相同。

我建议您使用仪表板表中故障表中的ID列。

如果您不想使用FaultsTBL.IDField,则存储从故障表中提取的时间。在上一次到现在的下一次获取中,依此类推。

总之,你需要一个指标!此外,DateDiff()足以替换您现有的where条件。最后,仅获取在最后一次提取后仍然打开和/或发生的故障。