【问题标题】:How to dynamically retrieve all data from a year ago (Next Month) till the end of current Month based on year and month如何根据年份和月份动态检索一年前(下个月)到当前月底的所有数据
【发布时间】:2016-08-18 20:10:09
【问题描述】:

即使某些月份没有数据,我也会使用 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())

Bur 由于某种原因它没有给我带来任何东西。 我的查询是这样的:

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())

如何操纵这些日期? 我的表日历结构:

【问题讨论】:

  • EOMONTH(GETDATE()) 是怎么回事? eomonth 不返回一天吗?所以我们基本上只是要求当月?
  • EOMONTH(GETDATE()) 带来当月的月底
  • 所以日期范围应该是从去年9月到今年8月底
  • 提供表格定义和样本数据。

标签: sql tsql reporting-services


【解决方案1】:
  WHERE   ( b.YearNum = YEAR(GETDATE())-1 and b.MonthNum >= MONTH(GETDATE())+1 ) OR 
          ( b.YearNum = YEAR(GETDATE()) and b.MonthNum <= MONTH(GETDATE()) )

【讨论】:

  • 虽然这可能会回答问题,但最好在此处包含答案的基本部分并提供更多上下文。改用评论
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-05
  • 2014-09-07
  • 2022-11-17
  • 1970-01-01
相关资源
最近更新 更多