2016-08-18 5 views
0

月の一部のデータがなくてもLEFT JOINテーブルカレンダーを使用して月の列を取得しています。私がtblCalendar.Year = 2016と言うなら、それは今年12ヶ​​月すべてを持ってくるでしょう。 しかし、私は今月末から年にデータが必要です。 は、だから私はそれは私に何をもたらすのdoesnt何らかの理由でデータ範囲今年の終わりから年月に至るまでの1年前(次月)のデータをすべて動的に取得する方法

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())をアップ何ですか? 1日に帰りませんか?基本的には今月を頼んでいるのですか? – DrSatan1

+0

'EOMONTH(GETDATE())'は現在の月の末尾を返します – Oleg

+0

したがって、日付範囲は今年の8月の去年の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

関連する問題