我们有一个故障表,其中包含一个数据类型为DATE_ACTIVE
的列datetime2(7)
。此列中的值如下:
2015-08-16 05:02:46.0000000
2015-08-16 05:13:25.0000000
我们需要从此表中获取活动超过10分钟的记录(故障)并将其推送到另一个表中,该表驱动指示活动 - 关闭事务的仪表板。我们在此表中有另一列,指示错误的状态(ACTIVE
或CLOSED
)。
我们决定继续实现这一目标:
select *
from table
where
CONVERT( float , CONVERT( datetime , getdate() )
- CONVERT( datetime , DATE_ACTIVE ) ) * 24 * 60 * 60 > 600
即使记录将其状态从活动状态更改为关闭状态并返回活动状态,此表也会保留记录。因此,没有唯一的ID,因为每次从关闭转换 - 活动或反之亦然插入新行。此表保留所有行,不从此表中删除任何内容。所以上面提到的方法为我们提供了冗余数据。
例如:每天上午10点10分后上午10点插入的状态为CLOSED的记录会被推送到下一个表格,因为上述条件总是令人满意,直到该行的生命周期。
有没有办法阻止这种情况?
答案 0 :(得分:0)
简短回答,除非您没有指示性列,否则您无法果断地说,仪表板表中的两个记录是两个单独的实例或相同。
我建议您使用仪表板表中故障表中的ID列。
如果您不想使用FaultsTBL.IDField,则存储从故障表中提取的时间。在上一次到现在的下一次获取中,依此类推。
总之,你需要一个指标!此外,DateDiff()足以替换您现有的where条件。最后,仅获取在最后一次提取后仍然打开和/或发生的故障。