使用星期和月份技巧SQL按日期计算SUM

时间:2015-04-24 12:53:40

标签: sql sql-server tsql date sum

我想要实现的是计算一些统计数据如何按周计算邮件表中的数据<但我需要显示月份/

的统计数据

例如在表格中我有这个

 '20130226',    312.00
 '20130305',    833.00

截至20130305的一周在2月份有2天,在3月份有5天。 我正努力实现:

2013-02-28  550.000000
2013-03-31  2285.000000

我有这个问题:

    CREATE TABLE #Old
    (
    Weeks DATE,
    summ NUMERIC (12,6)    
)
        INSERT INTO #Old VALUES  ( '20130226',  312.00)
        INSERT INTO #Old VALUES  ( '20130305',  833.00)
        INSERT INTO #Old VALUES  ( '20130312',  225.00)
        INSERT INTO #Old VALUES  ( '20130319',  453.00)
        INSERT INTO #Old VALUES  ( '20130326',  774.00) 



 SELECT  
    EOMONTH ( Weeks  )
    , sum (summ)  as cumesum
    FROM  #Old
    GROUP BY  EOMONTH ( Weeks  )

我知道它不对,因为它在两个月内没有分裂,但却没有想法如何实现它。

1 个答案:

答案 0 :(得分:1)

如果我理解正确,您希望按月分配每周数字。一种方法是在当前月份和上个月之间拆分数据 - 将值作为算术进行分配。

其余的只是聚合:

select EOMonth(weeks), sum(month_summ)
from ((select weeks, year(weeks) as yy, month(weeks) as mm,
              (case when day(weeks) >= 7 then summ
                    else summ * day(weeks) / 7.0
               end) as month_summ
       from #old o
      ) union all
      (select dateadd(month, -1, weeks) as weeks,
              year(dateadd(month, -1, weeks)) as yy,
              month(dateadd(month, -1, weeks)) as mm,
              summ * (1 - day(weeks) / 7.0)
       from #old o
       where day(weeks) < 7
      )
     )
group by EOMonth(weeks);
相关问题