我有一个需要显示过去60天数据的视图。目前我写了:
WHERE (TNP.ATimeWindowEnd > '2015-07-18 00:00:00') AND (TNP.ATimeWindowEnd < '2015-09-16 00:00:00')
但是每次尝试使用DateAdd(Day, Datediff(Day,0, GetDate() -1), 0)
(和-61)代替静态日期时,为了不手动编辑它。这有效,但减慢了查询的性能,使得视图不切实际。然后我将日期函数移动到变量:
SET @ToDate = DateAdd(Day, Datediff(Day,0, GetDate() -1), 0)
这提高了查询的速度(我怀疑它只运行一次而不是每行一次)但现在我不能在视图中使用它,因为我无法将局部变量添加到视图中。关于如何在不影响性能的情况下将动态日期纳入视图的任何想法?
答案 0 :(得分:2)
您可以在视图中使用以下内容吗?请检查。
WHERE TNP.ATimeWindowEnd > DATEADD(day, -60, CURRENT_TIMESTAMP)
修改:将<
替换为>
答案 1 :(得分:0)
如果您在TNP(ATimeWindowEnd)
上有索引,则使用函数可以更改索引使用情况。 SQL Server通常不支持在函数上使用索引,因此您可以使用:
WHERE TNP.ATimeWindowEnd >= CAST(DATEADD(day, -60, CURRENT_TIMESTAMP) as DATE)
所有计算都在CURRENT_TIMESTAMP
完成。时间组件由CAST()
删除。
如果您使用的是旧版本的SQL Server,则需要使用DATEADD()
技巧删除时间组件。