2017-11-29 1 views
0

달 점프 데이터가있는이 문제가 있습니다. Record Date가 한 번에 1 개월 씩 점프하는 것을 볼 수 있습니다.날짜가 멈 추면 SQL에있는 모든 레코드의 출력 날짜 (한 달 간격이어야 함)

01/01/2017에 새 줄을 생성해야합니다. 기본적으로 한 달에 한 번 갭이있을 때마다 새로운 라인을 생성해야합니다.

어떻게하면됩니까? 회계 주간은 일주일에 불과하며, 월 단위는 일년 단위입니다. Week num은 몇 년 전에 시작되어 누적되어 계속 실행되는 주입니다. 문제가되지 않는 특별한 테이블을 볼 수 있습니다. 나는 주간, 년별, 월별로 min 또는 max를 사용합니다. 그 달의 마지막 주)

[Week Num] [Record Date] [Record Date] [Fiscal Year] [Fiscal Month] [Fiscal Week] [Customer #] [Group Description] 
158  01/10/2016 NULL   2016   10    41   12345  aDrive 
162  01/11/2016 NULL   2016   11    45   12345  aDrive 
166  01/12/2016 NULL   2016   12    49   12345  aDrive 

는 기본적으로 나는 10 월, 11 월을 생성하고 싶지 않아, 내가 더 이후의 기록하지만 차이 중 하나가 마지막 레코드를 생성합니다.

도와주세요.

+0

SQL Server 2005 – ReportWarrior

+0

응? 나는 당신이 여기서하려고하는 것을 이해하기조차 할 수 없다. –

+0

"나는 달 점프 데이터가있는이 문제가 있습니다." Ok ... 예제 코드에서이를 설명합니다. 제공되는 것은 명확하지 않습니다. 2011 년 1 월 12 일 이후에 더 많은 데이터가 있어야합니까? – Zorkolot

답변

0

귀하의 질문을 이해하려고 시도했습니다. 다음 쿼리를 사용하면 도움이 될 것입니다. 그러나 여기에 재귀 CTE를 사용했기 때문에 SQLServer 2005에서 작동하지 않을 수도 있습니다.

DECLARE @ToDate date 
SET @ToDate='20171201' -- we'll calculate new rows until this date 

;WITH monthCTE AS(
    -- get the last row from your table 
    SELECT [Week Num],[Record Date],[Fiscal Year],[Fiscal Month],[Fiscal Week],[Customer #],[Group Description] 
    FROM 
    (
     SELECT TOP 1 * 
     FROM [Your data] 
     ORDER BY [Week Num] DESC 
    ) q 

    UNION ALL 

    -- calculate the next row 
    SELECT 
    [Week Num]+DATEDIFF(WEEK,[Record Date],[New Record Date]), 
    [New Record Date], 
    YEAR([New Record Date]), 
    MONTH([New Record Date]), 
    CASE 
     WHEN MONTH([New Record Date])=1 THEN 1 -- return 1 if it is the first month in the year 
     ELSE [Fiscal Week]+DATEDIFF(WEEK,[Record Date],[New Record Date]) 
    END, 
    [Customer #], 
    [Group Description] 
    FROM 
    (
     SELECT 
     [Week Num],[Record Date],[Fiscal Year],[Fiscal Month],[Fiscal Week],[Customer #],[Group Description], 
     DATEADD(MONTH,1,[Record Date]) [New Record Date] -- add one month to the previous date 
     FROM monthCTE 
     WHERE [Record Date]<@ToDate 
    ) q 
) 
SELECT [Week Num],[Record Date],[Fiscal Year],[Fiscal Month],[Fiscal Week],[Customer #],[Group Description] 
FROM [Your data] 

UNION -- this operation also exclude duplicate for the last row 

SELECT [Week Num],[Record Date],[Fiscal Year],[Fiscal Month],[Fiscal Week],[Customer #],[Group Description] 
FROM monthCTE 

ORDER BY [Week Num] 

나는 당신을 올바르게 이해하고 올바르게 작동하면 모든 표현식의 정확성을 검사해야합니다.

관련 문제