2014-04-18 22 views
0

所以我有这个代码,这是为了抓取最近11个月的销售数据,包括当前月份,使它成为一整年。我需要做些什么才能将其转变为抓取过去12个月和当前月份的数据?我知道我必须改变右边的东西(选择期间)...但不知道如何抓取过去13个月的数据?

在这一个,左边的函数显示如何获得当前年份(2014)减1给予2013年,但我不明白正确的功能,2是什么意思? 谢谢

period <= (
    SELECT Period 
    FROM dbo.FiscalDates 
    WHERE (Date = CONVERT(varchar(10), GETDATE(), 102))) and period >= (
convert(varchar, left((
    SELECT Period 
    FROM dbo.FiscalDates 
    WHERE (Date = CONVERT(varchar(10), GETDATE(), 102))),4)-1)+'-'+ 
convert(varchar, right((
    SELECT Period 
    FROM dbo.FiscalDates 
    WHERE (Date = CONVERT(varchar(10), GETDATE(), 102))),2))) 
group by prodnum, period, WhseNum 
+1

哇你为什么要转换的日期'VARCHAR' ??? – Zane

+0

WHERE YourColumn> = DATEADD(MONTH,-13,CAST(GETDATE()AS DATE))' – Zane

+0

@Zane,我始终使用该转换将日期转换为更易读的形式,可以导出(在此情况下,'yyyy.mm.dd')。有关各种转换,请参阅http://www.sql-server-helper.com/tips/date-formats.aspx。但是,我仍然不确定他为什么在Where子句中使用它。 – PowerUser

回答

10

哇哦伙计我想你可能会在这里过于复杂。如果你想获得过去X个月的数据,那么只需使用DATEADD这是一个非常的useful function

所有你需要做的就是

select 
    YourColumns 
FROM YourTable 
WHERE YourDate >= DATEADD(MONTH, -13, CAST(GETDATE() AS DATE)) 

然后咣当你去那里。

0
 DECLARE 
     @FormYear AS INT, 
     @FormMonth AS INT, 
     @ToYear AS INT, 
     @ToMonth AS INT, 
     @FromDate AS DATE, 
     @ToDate AS DATE 

     SET @FormYear=YEAR(DATEADD(DAY, -365, GETDATE())) 
     SET @FormMonth=MONTH(DATEADD(DAY, -365, GETDATE())) 

     SET @ToYear=YEAR(GETDATE()) 
     SET @ToMonth=MONTH(GETDATE()) 

     SET @FromDate= CAST(CAST(@FormMonth AS VARCHAR) +'-'+'01'+ '-' +CAST(@FormYear AS VARCHAR) AS DATE) 
     SET @ToDate= CAST(CAST(@ToMonth AS VARCHAR) +'-' + '01'+'-' + CAST(@ToYear AS VARCHAR) AS DATE) 

之后,只需选择 -

YourDateField Between @FormDate AND @ToDate 
相关问题