我正在从事金融领域工作。 所以我想要4月到5月的数据。
假设本月是6月,那么我只想要今年4月到6月,它应按年和月分组。
如果假设当月是2月那么我想要去年4月到1月的详情 即2013年4月至2014年1月
我已经为此写了CTE表达式我得到了部分结果我不知道我做错了或者说错了
declare @Month int
declare @Year int ;
set @Month = 4;
set @Year = YEAR(GETDATE());
if (@Month <= MONTH(GETDATE()))
with cte as
(
SELECT N = 4, YYY = YEAR(GETDATE())
UNION ALL
SELECT N + 1, YYY
FROM cte
WHERE N+1 <= MONTH(GETDATE())
)
select N, YYY from cte
else
with cte as
(
SELECT N = 4 , YYYY = YEAR(GETDATE() - 1)
UNION ALL
SELECT N + 1,YYYY
FROM cte
WHERE N+1 <= 12
)
select N, YYYY from cte
我想要O / P这样的东西
如果当前月份大于4月那么或更具体地假设当前月份是6月份 那么
April 2014
May 2014
June 2014
如果当前月份是2014年2月,那么我想要
April 2013
May 2013
June 2013
July 2013
Aug 2013
Sep 2013
Oct 2013
Nov 2013
Dec 2013
Jan 2014
Feb 2014
谢谢。
答案 0 :(得分:3)
DECLARE @CurrentDate AS datetime = '20150212';
DECLARE @FirstDayInCurrentMonth AS datetime = DATEADD(day, 1 - DATEPART(day, @CurrentDate), @CurrentDate);
DECLARE @LastApril AS datetime = DATEADD(month, -(DATEPART(month, @FirstDayInCurrentMonth) + 8) % 12, @FirstDayInCurrentMonth);
WITH Periods AS (
SELECT @LastApril AS [Period]
UNION ALL
SELECT DATEADD(month, 1, [Period])
FROM Periods
WHERE [Period] < @FirstDayInCurrentMonth
)
SELECT DATENAME(month, [Period])
,DATEPART(year, [Period])
FROM Periods
请注意,这只会在4月返回4月。从您的问题来看,您是否想要在4月份过1或13个月的日子并不清楚。