我知道我缺少明显的东西,但对我来说却不是那么明显!
我有一个表值函数,该函数在给定开始,结束,间隔的情况下会产生一个不错的日期间隔范围(这要归功于另一个SO答案!)。
我还有另一个TVF,可以在给定日期的情况下生成最新的零件交易。
但是,我能够在给定的开始日期和结束日期之间的一系列日期中产生最后零件交易。因此,给定3月到5月之间的间隔,即2天,我会得到两者之间的某种时间序列。
但是,我现在与CTE碰壁了,并试图避免进入程序/游标样式循环来实现此目的。
这是代码:
WITH datesTbl(DateValue)
AS (SELECT DateValue
FROM [dbo].[DateRange]('2016-03-18', '2016-04-27', 1))
SELECT *
FROM datesTbl dr
INNER JOIN dbo.MoveDateDiff(dr.Datevalue, DATEADD(day, 1, dr.DateValue), 14792) pm
ON DATEDIFF(Day, dr.dateValue, pm.MovementDate) <= 1;
我知道基础TVF中还有其他概念错误,但是在这里,我想找到一种方法,以解决我似乎无法在内部联接语句的第一部分访问CTE的事实(此后没有语法错误) ON声明!)。
任何指导将不胜感激!
使用TVF时,您需要的APPLY
不是JOIN
:
WITH datesTbl(DateValue) as (
SELECT DateValue
FROM [dbo].[DateRange]('2016-03-18', '2016-04-27', 1)
)
SELECT *
FROM datesTbl dr CROSS APPLY
dbo.MoveDateDiff(dr.Datevalue, DATEADD(day, 1, dr.DateValue), 14792) pm
WHERE DATEDIFF(Day, dr.dateValue, pm.MovementDate) <= 1;
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句