有下面一条sql,我的需求是这样的:
        比如有个时间字段和数量字段,我要求,这个月(或者按周,按小时)和上个月(或者上周,小时)的增量,比如说1月份30,2月份50,3月份40,7月份的80,那么2月份的增量就是30,3月份的增量是-10,问题来了,我的sql只能查挨到的月份,7月份旁边没有6月份,就查不到增量,怎么改呀,sql如下:
Select (Cast(T1.周 As Varchar(10))+'周较'+Cast(T2.周 As Varchar(10))+'周') as crecordtime , (T1.总数量 - T2.总数量) as ccount
                         From (Select datepart(ww,crecordtime) 周, Sum(ccount) 总数量 From tb 
                         where crecordtime >='2011-12-5 0:00:00' and crecordtime<='2012-7-31 0:00:00' 
           Group By datepart(ww,crecordtime) ) T1, (Select datepart(ww,crecordtime) 周, Sum(ccount) 总数量
          From tb where crecordtime >='2011-12-5 0:00:00' and crecordtime<='2012-7-31 0:00:00' 
             Group By datepart(ww,crecordtime) ) T2  Where T1.周 = T2.周+1

解决方案 »

  1.   

    用子查询
    T1.总数量-(select top 1 sum() from where order by ..desc)
    这样就不要连续
    只是减去最近一个日期的
      

  2.   

    Select (Cast(T1.周 As Varchar(10))+'周较'+Cast(T2.周 As Varchar(10))+'周') as crecordtime , (T1.总数量 - T2.总数量) as ccount
      From (Select datepart(ww,crecordtime) 周, Sum(ccount) 总数量 From tb  
      where crecordtime >='2011-12-5 0:00:00' and crecordtime<='2012-7-31 0:00:00'  
      Group By datepart(ww,crecordtime) ) T1, (Select top 1 datepart(ww,crecordtime) 周, Sum(ccount) 总数量
      From tb where crecordtime >='2011-12-5 0:00:00' and crecordtime<='2012-7-31 0:00:00' and datepart(ww,crecordtime) < T1.周  
      Group By datepart(ww,crecordtime) order by datepart(ww,crecordtime) desc) T2 --Where T1.周 = T2.周+1