Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL-如何使用DateDiff条件排除过去的记录并仅处理新插入的记录_Sql_Sql Server_View - Fatal编程技术网

SQL-如何使用DateDiff条件排除过去的记录并仅处理新插入的记录

SQL-如何使用DateDiff条件排除过去的记录并仅处理新插入的记录,sql,sql-server,view,Sql,Sql Server,View,我有一个视图,其中列出了小于等于80天的记录。该视图位于现有的tableAeoiCaptureLog上,该tableAeoiCaptureLog已经有过去的记录 我想在视图中实现一个过滤器,因此对于SQL Server Transact-SQL,日期条件,我们可以执行如下操作: AND LastModifiedDate >= DATEADD(dd,GETDATE(),-80) AND LastModifiedDate > CAST('2018-05-17' AS DATETIM

我有一个视图,其中列出了小于等于80天的记录。该视图位于现有的tableAeoiCaptureLog上,该tableAeoiCaptureLog已经有过去的记录


我想在视图中实现一个过滤器,因此对于SQL Server Transact-SQL,日期条件,我们可以执行如下操作:

 AND LastModifiedDate >= DATEADD(dd,GETDATE(),-80)
 AND LastModifiedDate >  CAST('2018-05-17' AS DATETIME)
其中文字“2018-05-17”表示部署的第一天

第一种情况可以追溯到80天以前

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

因为这两个值都必须计算为TRUE,所以我们将返回限制为两个日期值中的较大值

我们可以让它更难看,使用复杂的大小写表达式返回两个日期值中的较大值,并进行单个比较

对于MySQL,这将是类似的方法

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

对于SQL Server Transact-SQL,我们可以执行以下操作:

 AND LastModifiedDate >= DATEADD(dd,GETDATE(),-80)
 AND LastModifiedDate >  CAST('2018-05-17' AS DATETIME)
其中文字“2018-05-17”表示部署的第一天

第一种情况可以追溯到80天以前

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

因为这两个值都必须计算为TRUE,所以我们将返回限制为两个日期值中的较大值

我们可以让它更难看,使用复杂的大小写表达式返回两个日期值中的较大值,并进行单个比较

对于MySQL,这将是类似的方法

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

第一天是什么时候?部署的第一天是什么时候?部署后的第100天是什么?在这种情况下,部署意味着什么?方括号用于标识Transact-SQL和Microsoft SQL Server,而不是MySQL。我怀疑mysql标记在这个问题上是一个错误,它本来是用于MicrosoftSQLServer的标记。在任何情况下,裸列上的谓词都优于表达式。。。对裸LastModifiedDate列进行比较,并对返回日期值的表达式执行大于或等于的操作。e、 g.LastModifiedDate>=DATEADDdd,GETDATE,-80第1天是什么时候?部署的第1天是什么时候?部署后的第100天是什么?在这种情况下,部署意味着什么?方括号用于标识Transact-SQL和Microsoft SQL Server,而不是MySQL。我怀疑mysql标记在这个问题上是一个错误,它本来是用于MicrosoftSQLServer的标记。在任何情况下,裸列上的谓词都优于表达式。。。对裸LastModifiedDate列进行比较,并对返回日期值的表达式执行大于或等于的操作。e、 这正是我要建议的。我的评论是要向OP强调,没有好的方法来确定部署的第一天,除非它存储在另一个表中,或者像这个答案那样硬编码。谢谢Spencer。这当然有帮助。另一方面,如果我只是在现有视图中添加另一个AND条件,比如和LastModifiedDate>select create_date from sys.views,其中name='vAeoiSurplusCaseCreation',您认为它会像预期的那样工作吗?只有在子查询中的选择保证返回不超过一行时,它才会工作。如果有多行,可以在MIN或MAX函数中包装create_date,例如>选择MAXcreate_date from。。。。您可能希望处理一个条件,其中没有行,并且返回NULL。e、 g.>选择COALESCEMAXcreate_date,从中获取_date。。。并确保执行查询的用户有足够的权限从SysVIEW中选择。还考虑在删除和重新创建视图时CuraTyDATE会发生什么。还考虑两个或多个模式可以包含具有相同名称的视图…您可能希望将sys.views返回的行缩小到[dbo]模式,这正是我要建议的。我的评论是要向OP强调,没有好的方法来确定部署的第一天,除非它存储在另一个表中,或者像这个答案那样硬编码。谢谢Spencer。这当然有帮助。另一方面,如果我只是在现有视图中添加另一个AND条件,比如和LastModifiedDate>select create_date from sys.views,其中name='vAeoiSurplusCaseCreation',您认为它会像预期的那样工作吗?只有在子查询中的选择保证返回不超过一行时,它才会工作。如果有多行,可以在MIN或MAX函数中包装create_date,例如>选择MAXcreate_date from。。。。您可能希望处理一个条件,其中没有行,并且返回NULL。e、 g.>选择COALESCEMAXcreate_date,从中获取_date。。。并确保执行查询的用户有足够的权限从SysVIEW中选择。还考虑在删除和重新创建视图时CuraTyDATE会发生什么。还考虑两个或多个模式可以包含具有相同名称的视图…您可能希望将sys.views返回的行缩小到[dbo]模式。