问题:
如何检测哪些行具有lastModifiedDate< 30s /分钟的边界< approvedDate 在T-SQL?
背景
我们有一个常规流程(Autonomy的ODBCConnector产品),它扫描我们数据库中的视图,并根据lastModifiedDate字段选取自上次运行以来发生过变化的新闻文章。 这种情况发生在每30秒,分钟和分钟后30分钟。
此过程中存在一个错误,其中一个操作是批准这些文章,这不会导致lastModifiedDate更改,而是更改了approvedDate。
因此,任何经过修改,拾取和批准的文章都不会出现。
对于approvedDate >= DATEADD(second, 30, lastModifiedDate)
的文章来说,这总是如此 - 但这并没有找到所有仍然需要拿起的文章。一篇文章的lastModifiedDate可能为28/11/2011 15:48:13
,而被批准的日期为28/11/2011 15:48:31
,并且该流程无法接收该文章。
注意,approvedDate不一定比lastModifiedDate
更新答案 0 :(得分:1)
你的意思是你想要所有的记录,其中被批准的日期在相对于lastModifiedDate所在的30s时间段的下一个30s时间段内?
LastModifiedDate | ApprovedDate | Include In Results?
00:00:00 | 00:00:00 | No
00:00:00 | 00:00:29 | No
00:00:00 | 00:00:30 | Yes
00:00:00 | 00:00:31 | Yes
00:00:00 | 00:01:01 | No?
00:00:29 | 00:00:29 | No
00:00:29 | 00:00:30 | Yes
00:00:29 | 00:00:31 | Yes
00:00:29 | 00:01:01 | No?
如果是这样,试试这个?
WHERE
DATEDIFF(second, 0, ApprovedDate ) / 30
=
DATEDIFF(second, 0, LastModifiedDate) / 30 + 1
在我提供的原始表格中,No?
应该是Yes
,试试这个吗?
WHERE
DATEDIFF(second, 0, ApprovedDate ) / 30
>
DATEDIFF(second, 0, LastModifiedDate) / 30
或者,也许......
WHERE
ApprovedDate
>=
DATEADD(second, 30 - DATEDIFF(second, 0, LastModifiedDate) % 30, lastModifiedDate)