根据参数和最后一行日期更新临时 table 中的日期
Update date in temporary table based upon parameter and last row date
我正在尝试使用参数并查看最后一行编号的日期来更新临时 table 中的日期。
DECLARE @multiDayCourseDaysBetween INT = 3;
CREATE TABLE #Courses(TempId INT IDENTITY(1,1)
, [Date] DATE
, CourseTypeId INT
, OrganisationId INT
, Reference VARCHAR(100)
, CreatedByUserId INT
, CourseTypeCategoryId INT
, TrainersRequired INT);
CREATE TABLE #TempDates(TempId INT
, [Date] DATE
, LagDate DATE);
INSERT INTO #Courses([Date])
Values('2016-06-01')
INSERT INTO #Courses([Date])
Values('2016-06-02')
INSERT INTO #Courses([Date])
Values('2016-06-03')
INSERT INTO #TempDates(tempId, [date], LagDate)
SELECT TempId, [Date]
, LAG(c.[Date],1) OVER (ORDER BY [Date]) as LagDate
FROM #Courses c
UPDATE #TempDates
SET [Date] = DATEADD(dd, @multiDayCourseDaysBetween, LAG([Date],1) OVER (ORDER BY [Date]))
WHERE LagDate IS NOT NULL
但是我收到一个错误 - 'Windowed functions can only appear in the SELECT or ORDER BY clauses.'
例如,原始日期为
2016-06-01
2016-06-02
2016-06-03
但我需要他们成为
2016-06-01
2016-06-04
2016-06-07
基于 3 作为参数。
感谢您的帮助
尝试将最后一条语句更改为如下内容:
WITH b AS (
SELECT
TempId
, [Date]
, FIRST_VALUE([Date]) OVER (ORDER BY [Date]) as FirstDate
, ROW_NUMBER() OVER (ORDER BY [Date]) AS rowRank
FROM
#TempDates
)
UPDATE b
SET [Date] = DATEADD(day, (rowRank-1)* @multiDayCourseDaysBetween, FirstDate)
WHERE
rowRank > 1;
我正在尝试使用参数并查看最后一行编号的日期来更新临时 table 中的日期。
DECLARE @multiDayCourseDaysBetween INT = 3;
CREATE TABLE #Courses(TempId INT IDENTITY(1,1)
, [Date] DATE
, CourseTypeId INT
, OrganisationId INT
, Reference VARCHAR(100)
, CreatedByUserId INT
, CourseTypeCategoryId INT
, TrainersRequired INT);
CREATE TABLE #TempDates(TempId INT
, [Date] DATE
, LagDate DATE);
INSERT INTO #Courses([Date])
Values('2016-06-01')
INSERT INTO #Courses([Date])
Values('2016-06-02')
INSERT INTO #Courses([Date])
Values('2016-06-03')
INSERT INTO #TempDates(tempId, [date], LagDate)
SELECT TempId, [Date]
, LAG(c.[Date],1) OVER (ORDER BY [Date]) as LagDate
FROM #Courses c
UPDATE #TempDates
SET [Date] = DATEADD(dd, @multiDayCourseDaysBetween, LAG([Date],1) OVER (ORDER BY [Date]))
WHERE LagDate IS NOT NULL
但是我收到一个错误 - 'Windowed functions can only appear in the SELECT or ORDER BY clauses.'
例如,原始日期为
2016-06-01
2016-06-02
2016-06-03
但我需要他们成为
2016-06-01
2016-06-04
2016-06-07
基于 3 作为参数。
感谢您的帮助
尝试将最后一条语句更改为如下内容:
WITH b AS (
SELECT
TempId
, [Date]
, FIRST_VALUE([Date]) OVER (ORDER BY [Date]) as FirstDate
, ROW_NUMBER() OVER (ORDER BY [Date]) AS rowRank
FROM
#TempDates
)
UPDATE b
SET [Date] = DATEADD(day, (rowRank-1)* @multiDayCourseDaysBetween, FirstDate)
WHERE
rowRank > 1;