根据日期计算总和(当前,7天,......)

时间:2013-05-02 13:23:29

标签: sql sql-server sql-server-2008

以下是我目前正在使用的表格的示例:

Date -------- Number -------Total 
2012-03-28     3         158                
2012-03-29     4         168              
2012-04-08     2         256            
2012-04-12     1         155.98             
2012-04-14     6         245.00             
2012-04-20     10        156              
2012-04-21     8         87      
2012-04-26     3         158                
2012-04-26     4         168              
2012-04-29     2         256            
2012-04-30     1         155.98             
2012-05-02     6         245.00             
2012-05-02     10        156              
2012-05-02     8         87           

我需要从中得到如下表:

Total ----- Current ----7Days----14Days 
2451.96    1225.98    1869.96    1869.96              

在这种情况下,总和是SUM(总计), 当前是今天日期(2013年2月5日)的-7天因此从05/02 / 2013-04 / 25/2013添加总和 7天是今天日期的-14天或者是当前的-7天。所以它增加了05/02 / 2013-04 / 18/2013的总和。

所以。我不知道如何创建一个查询来获得7天的总和。

请帮忙!

2 个答案:

答案 0 :(得分:1)

您可以使用带有CASE表达式的聚合函数来获得结果:

select 
  sum(total) Total,
  sum(case when date >= dateadd(d, -7, getdate()) then total end) [Current],
  sum(case when date >= dateadd(d, -14, getdate()) then total end) [7Days],
  sum(case when date >= dateadd(d, -21, getdate()) then total end) [14Days]
from yt;

请参阅SQL Fiddle with Demo

如果您有更多日期范围,则会添加更多sum(case...)个表达式。

答案 1 :(得分:0)

SELECT SUM(Total) as 'Total',
       SUM( CASE WHEN convert(varchar(11),Date,101) >= convert(varchar(11),GETDATE() - 7,101)  
                 THEN Total ELSE 0 END) as 'Current',
       SUM( CASE WHEN convert(varchar(11),Date,101) >= convert(varchar(11),GETDATE() - 14,101)  
                 THEN Total ELSE 0 END) as '7Days' ,
       SUM( CASE WHEN convert(varchar(11),Date,101) >= convert(varchar(11),GETDATE() - 28,101)  
                 THEN Total ELSE 0 END) as '14Days' 
FROM mytable

<强>输出

TOTAL   CURRENT 7DAYS   14DAYS
2451.96 1225.98 1468.98 2125.96