0

2 つの日付の間の月のリストを生成し、 SQL Server 2012で得た年ごとに結果を繰り返す必要があります。

次に例を示します。

  • 開始日 = 2010-11-01
  • 終了日 = 2011-01-01
  • 基準年 = 2008

私が望む結果:

StatDate     StatYearGroup
--------------------------
2007-11-01            2008
2007-12-01            2008
2008-01-01            2008
2008-11-01            2009
2008-12-01            2009
2009-01-01            2009
2009-11-01            2010
2009-12-01            2010
2010-01-01            2010
2010-11-01            2011
2010-12-01            2011
2011-01-01            2011

そのクエリを使用して 2 つの日付の間の月のリストを生成できますが、@endDate と @referenceYear の間で毎年結果を繰り返すにはどうすればよいですか? また、StatYearGroup の値を取得するにはどうすればよいですか?

declare @startDate date = '2010-11-01';
declare @endDate date = '2011-01-01';
declare @referenceYear int = 2008;

with dateRange(StatDate) as 
(
    select @startDate
    union all
    select dateadd(month, 1, StatDate)
    from dateRange 
    where StatDate < @endDate
)
select StatDate
from dateRange
4

1 に答える 1

1

これを試してみてください -

DECLARE 
      @startDate DATE = '2010-11-01'
    , @endDate DATE = '2011-01-01'
    , @referenceYear INT = 2008

;WITH rng AS 
(
    SELECT StatDate = @startDate, StatYearGroup = YEAR(@endDate)

    UNION ALL

    SELECT DATEADD(MONTH, 1, StatDate), StatYearGroup
    FROM rng 
    WHERE StatDate < @endDate
), years AS 
(
    SELECT StatDate, StatYearGroup
    FROM rng 

    UNION ALL

    SELECT DATEADD(MONTH, -12, StatDate), StatYearGroup - 1
    FROM years 
    WHERE StatYearGroup > @referenceYear
)
SELECT *
FROM years
ORDER BY StatDate, StatYearGroup
于 2013-04-24T06:38:36.773 に答える