2016-08-18 48 views
0

即使在某些月份沒有數據,我仍使用LEFT JOIN表日曆帶來月份列。它可以工作,如果我說tblCalendar.Year = 2016,所以它會爲我帶來今年的所有12個月。 但是我需要從本月底開始的一年數據。 所以我使用的數據範圍如何根據年份和月份動態檢索一年前(下個月)到當月月底的所有數據

where  cal.YearNum >= YEAR(GETDATE())-1 AND cal.YearNum <=YEAR(GETDATE()) 
      AND cal.MonthNum >=MONTH(EOMONTH(GETDATE()))+1 AND cal.MonthNum <=MONTH(GETDATE()) 

柏迪由於某種原因,它沒有帶給我什麼。 像這樣我的查詢:

with cte_Data 
AS  (
     select Month(effectiveDate) as MonthNum 
       Year(EffectiveDate) as YearNum 
     from MyTable 
     where EffectiveDate >=DateAdd(yy, -1, DATEADD(d, 1, EOMONTH(GETDATE()))) AND EffectiveDate <= EOMONTH(GETDATE()) 
     ) 
select * 
from tblCalendar cal left join cte_Data cd ON cal.MonthNum=cd.ClrEffMonth AND cal.YearNum=cd.ClrEffYear 
where  cal.YearNum >= YEAR(GETDATE())-1 AND cal.YearNum <=YEAR(GETDATE()) 
      AND cal.MonthNum >=MONTH(EOMONTH(GETDATE()))+1 AND cal.MonthNum <=MONTH(GETDATE()) 

我怎麼能操縱這些日期? 我的表日曆結構: enter image description here

+0

什麼事與'EOMONTH(GETDATE())'? 不會迴歸一天嗎?所以我們基本上只是要求當前的月份? – DrSatan1

+0

'EOMONTH(GETDATE())'帶來本月末 – Oleg

+0

,所以日期範圍應該從去年9月到今年8月底 – Oleg

回答

0
WHERE (b.YearNum = YEAR(GETDATE())-1 and b.MonthNum >= MONTH(GETDATE())+1) OR 
      (b.YearNum = YEAR(GETDATE()) and b.MonthNum <= MONTH(GETDATE())) 
+0

雖然這可能會回答這個問題,但最好在這裏包含答案的基本部分並提供更多的上下文。改用評論 – zinking