SQL - 如何使用DateDiff条件来排除过去的记录,并仅对新插入的记录起作用

时间:2018-05-17 21:26:21

标签: sql sql-server view

我有一个View列出了小于等于80天的记录。视图位于现有表( AeoiCaptureLog )上,该表已有过去的记录。

我想在视图中实现过滤器,因此日期条件(< = 80)仅对在实时环境中部署视图后插入的数据有效,并且不应考虑已有80天的现有数据或更少。但是在部署100天之后,它仍然应该返回最后80天的数据,因此我假设我们不能将视图创建日期用作参数。

CREATE VIEW [dbo].[vAeoiSurplusCaseCreation] AS
Select AccessNumber, DocumentID, LastModifiedDate, StatusCode
FROM AeoiCaptureLog 
WHERE StatusCode IN (6, 13, 15) 
AND DATEDIFF(dd, [LastModifiedDate], GETDATE()) <= 80

如果有任何疑问,请随时告诉我。

需要注意的重要事项是:

  • 在部署的第1天 - 视图不应返回任何数据(如果在部署View后AeoiCaptureLog中没有插入新记录) BUT
  • 部署后第100天 - 视图应仅返回最近80天的数据。

1 个答案:

答案 0 :(得分:2)

对于SQL Server(Transact-SQL),我们可以这样做:

 AND LastModifiedDate >= DATEADD(dd,GETDATE(),-80)
 AND LastModifiedDate >  CAST('2018-05-17' AS DATETIME)

其中的文字&#39; 2018-05-17&#39;代表&#34;部署的第1天&#34;

第一个条件回顾80天。

第二个条件回溯到指定的日期。

由于这两个都必须评估为TRUE,我们将返回限制为两个日期值中较大的一个。

我们可以使这个更丑陋,并使用复杂的CASE表达式返回两个日期值中较大的一个,并进行一次比较。

使用MySQL,它将是类似的方法

 AND LastModifiedDate >= DATE(NOW()) + INTERVAL -80 DAYS
 AND LastModifiedDate >  '2018-05-17' + INTERVAL 0 DAYS