2016-09-26 1 views
0

매개 변수를 사용하여 마지막 행 번호의 날짜를보고 임시 테이블의 날짜를 업데이트하려고합니다.매개 변수 및 마지막 행 날짜를 기준으로 임시 테이블의 날짜를 업데이트하십시오.

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 

그러나 '윈도우 함수는 SELECT 또는 ORDER BY 절에만 나타날 수 있습니다.'라는 오류 메시지가 나타납니다.

예를 들어 원래 날짜

2016-06-01 
2016-06-02 
2016-06-03 

것 그러나 나는

2016-06-01 
2016-06-04 
2016-06-07 

매개 변수로 3 기반으로되기 위해 그들을 필요합니다.

+2

그것은 당신이 실제로 소스 데이터, 처리 규칙 및 원하는 출력을 달성하기 위해 노력하고있다은 무엇입니까? 솔루션의 중간 단계에 있고 지금은 완료 방법을 묻는 중입니다. 반면 완전히 다른 솔루션이 더 바람직 할 것으로 보입니다. – iamdave

+0

적절한 소프트웨어 (MySQL, Oracle, DB2 등)와 버전으로 데이터베이스 질문에 태그를 지정하는 것이 좋습니다. 'sql-server-2014'. 구문과 기능의 차이가 종종 답변에 영향을 미칩니다. – HABO

답변

1

아래처럼 뭔가에 마지막 문을 변경해보십시오 어떤 도움

감사 :

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; 
+0

고맙습니다! – Dough

관련 문제