SQL-如何使用DateDiff条件排除过去的记录并仅处理新插入的记录
我有一个视图,其中列出了小于等于80天的记录。该视图位于现有的tableAeoiCaptureLog上,该tableAeoiCaptureLog已经有过去的记录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
我想在视图中实现一个过滤器,因此对于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]模式。