查找日期之间的金额总和

时间:2014-10-24 01:34:26

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

我有以下情况:

有一个表格,其中包含每个客户和产品每周和每月最后一天加载的数据。

我需要获取每个产品在当月最后一天加载的数据的数据总和(让我们说) - 为所有客户整合它。

输入是2个日期 - 期间的开始和结束,我需要在单个SQL查询中完成此操作。

以下是我正在使用的查询。期间是日期时间字段。

SELECT      
        Period
        ,sum([Amount]) as 'Amount'
from        tableA 
 where  Period between convert(datetime,'201110'+'01',121) and dateadd(second,-1,dateadd(month,1,convert(datetime,'201201'+'01',121)))
   and  cond1 = .....
   and  cond2 = ....
group by    
        Period

上面的查询会产生如下所示的数据。

enter image description here

我需要查看每个月最后一天的金额,即31-Oct-11,30-Nov-11,31-Dec-11等等。

最终结果应如下所示(与我目前所获得的相反 - 上面):

enter image description here

你能帮忙!!

1 个答案:

答案 0 :(得分:4)

如果你只是想要在这个时期内每个月的最后一天的值,我认为添加这样的条件应该有效:

AND Period = DATEADD(d, -1, DATEADD(m, DATEDIFF(m, 0, period) + 1, 0))

查询看起来像这样:

SELECT
    Period,
    SUM([Amount]) AS 'Amount'
FROM tableA 
WHERE Period BETWEEN CONVERT(DATETIME,'201110'+'01',121) AND DATEADD(SECOND,-1,DATEADD(MONTH,1,CONVERT(DATETIME,'201201'+'01',121)))
  AND Period = DATEADD(d, -1, DATEADD(m, DATEDIFF(m, 0, period) + 1, 0))
  AND  cond1 = .....
  AND  cond2 = ....
GROUP BY Period

如果您的期间日期时间有时间值,则必须删除该部分才能与条件提供的最后一天日期匹配,如下所示:

AND DATEADD(dd, DATEDIFF(dd, 0, Period), 0) = 
    DATEADD(d, -1, DATEADD(m, DATEDIFF(m, 0, period) + 1, 0))