如果今天是 2012 年 8 月 15 日,则查询应返回以下内容
15/01/2011,
15/02/2011,
...
...
15/07/2012
15/08/2012
如果今天是 2012 年 8 月 31 日,则查询将返回
31/01/2011,
28/02/2011, <<<<this is the nearest date
...
...
31/07/2012
31/08/2012
我们的仓库中有一个 vw_DimDate 应该会有所帮助
编辑 它包含以下字段
目前我正在使用以下内容,但看起来相当复杂!...
DECLARE @Dt DATETIME = '31 JUL 2012'--GETDATE()
;WITH DateSet_cte(DayMarker)
AS
(
SELECT DayMarker
FROM WHData.dbo.vw_DimDate
WHERE
DayMarker >= CONVERT(DATETIME,CONVERT(CHAR(4),DATEADD(YEAR,-1,@Dt),112) + '0101') AND
DayMarker <=@Dt
)
, MaxDate_cte(MaxDate)
AS
(
SELECT [MaxDate] = MAX(DayMarker)
FROM DateSet_cte
)
SELECT
[Mth] = CONVERT(DATETIME,CONVERT(CHAR(6),a.DayMarker,112) + '01')
, MAX(a.DayMarker) [EquivDate]
FROM DateSet_cte a
WHERE DAY(a.DayMarker) <= (SELECT DAY([MaxDate]) FROM MaxDate_cte)
GROUP BY CONVERT(DATETIME,CONVERT(CHAR(6),a.DayMarker,112) + '01')