【发布时间】:2016-10-28 14:57:44
【问题描述】:
我有一个 CTE,它通过以下方式根据模式返回一组行:
模式表 (从开始日期开始为下周一创建 100 行)
| |
|--Id--|--Start Date--|--Count--|--Days--|
| |
|--AB--| 01-01-2000 | 100 | Monday |
| |
我有一个函数,它通过传递如下开始日期来计算下一个发生的日期:
dbo.fx_get_next_occurrence(@startDate DATETIME, @days VARCHAR)
为了生成行,我使用如下 CTE:
WITH Occurrences_CTE(Num, Id, StartDate)
AS
(
SELECT
SP.n
,F.Id
,dbo.fx_get_next_occurrence(F.Days, F.StartDate)
FROM
#RecurrencePattern AS F
INNER JOIN
dbo.Numbers AS SP
ON SP.n between 1 and F.[Count]
)
dbo.numbers 是一个包含递增数字列表的表格。
现在,当我运行 SELECT 时,当然 CTE 总是返回相同的“下一个日期”,因为 Date 永远不会增加,所以这个 SELECT:
SELECT
CTE.Id, CTE.Num, CTE.StartDate
FROM
Occurrences_CTE CTE
生成类似于以下结果的内容:
| |
|--Id--|--Num--|--Start Date--|
| |
|--AB--|--001--|--01-03-2000--|
|--AB--|--002--|--01-03-2000--|
|--AB--|--003--|--01-03-2000--|
|--AB--|--004--|--01-03-2000--|
|--AB--|--005--|--01-03-2000--|
现在,尽管 函数 按预期工作,但我如何从 CTE 获取 先前计算的日期行,以便我可以将此日期传递给我的函数从前一天开始移动到下一个可用日期?将 CTE 加入自身,然后呢?
在 SQL 2012 和 2014 上,我可以使用 LAG 和其他功能。
【问题讨论】:
标签: sql-server date common-table-expression