选择两个日期之间的所有月份并重复每年的结果
我需要生成两个日期之间的月份列表,然后重复每年的结果,我与SQL Server 2012。选择两个日期之间的所有月份并重复每年的结果
下面是一个例子:
- 起始日期= 2010-11-01
- 结束日期= 2011-01-01
- ReferenceYear = 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
我可以生成mon列表之间的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
回答:
尝试这一个 -
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
以上是 选择两个日期之间的所有月份并重复每年的结果 的全部内容, 来源链接: utcz.com/qa/266098.html