问题描述
我已经创建了一个视图,并希望具有滚动数据范围。我知道视图中不允许使用局部变量,因此想知道最好的方法是什么。我不想将DATEADD
放在WHERE
中,因为我正在处理大量数据,因此会大大降低其速度。
CREATE VIEW uvw_new_view
DECLARE @startdate
DECLARE @enddate
SET @startdate = DATEADD(yy,DATEDIFF(yy,GETDATE()) - 1,0) -- back 1 year
SET @enddate = DATEADD(yy,GETDATE()) + 4,-1) -- forward 3 years
//stuff
WHERE startdate >= @startdate AND enddate <= @enddate
提前欢呼:)
解决方法
大概基于语法,您正在使用SQL Server。
您需要一个表值函数。例如,一个返回范围内所有日期的函数:
create function dates (
@startdate date,@enddate date
)
returns table
as
return
with cte as (
select @startdate as dte
union all
select dateadd(day,1,dte)
from cte
where dte < @enddate
)
select dte
from cte;
Here是本示例的db 小提琴。