【发布时间】:2015-09-29 09:19:41
【问题描述】:
我们有一个故障表,其中包含一个数据类型为datetime2(7) 的列DATE_ACTIVE。此列中的值如下:
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 点插入的状态为 CLOSED 的记录每次在上午 10.10 之后都会被推送到下一个表,因为在该行的生命周期之前始终满足上述条件。
有没有办法防止这种情况发生?
【问题讨论】:
-
"我们在 this 表中有另一个字段",哪个表?具有原始故障的那个还是您将它们复制到的那个?此外,您应该能够轻松添加
WHERE子句,通过主键值过滤掉已经存在的行。 -
在两个表中。没有主键。
-
@Umakant 如果您将表格和一些测试数据与预期输出一起包含在内,可能会有所帮助
-
然后添加一个主键,在源表中添加它的自动编号/身份,而不是在另一个表中,以便您可以复制源表中生成的值。
-
任何可能的列组合,使其唯一!!,从两个表中发布示例记录
标签: sql sql-server datetime threshold redundancy