按时间段聚合SQL列值

Sun*_*nce 5 sql sql-server

我每5分钟就有一些数值数据(即每天288个值,以及相当多的数据).我需要编写一个可以返回每天所有值的总和的查询.所以目前这个表看起来像这样:

03/30/2010 00:01:00  --   553   
03/30/2010 00:06:00  --   558   
03/30/2010 00:11:00  --   565  
03/30/2010 00:16:00  --   565  
03/30/2010 00:21:00  --   558   
03/30/2010 00:26:00  --   566  
03/30/2010 00:31:00  --   553   
...
Run Code Online (Sandbox Code Playgroud)

这持续了'x'天,我希望查询返回'x'行数,每行包含每天所有值的总和.像这样的东西:

03/30/2010  --  <sum>
03/31/2010  --  <sum>
04/01/2010  --  <sum>
Run Code Online (Sandbox Code Playgroud)

查询将进入Dundas webpart,所以不幸的是我无法编写自定义用户函数来帮助它.所有逻辑都只需要在一个大查询中.任何帮助将不胜感激,谢谢.我正试图让它在目前使用GROUP BY和DATEPART工作,不确定它是否是正确的方法.

sch*_*and 2

我不明白你如何使用DATEPART它,因为它不能只返回值的日期部分DATETIME(如果我弄错了,请纠正我)。有效的方法是使用DATEADD“null”时间并按 form 的值进行分组YYYY-MM-DD 00:00:00.000

如果您碰巧拥有 Adventure Works 数据库,则以下查询适用于该数据库(在 SQL Server 2005 上测试)。除了使用它之外,DATEADD它与@OMG Ponies 的建议非常相似:

select
    dateadd(dd, 0, datediff(dd, 0, OrderDate)) as SaleDay
    , sum(taxamt) as Amount
from
    Sales.SalesOrderHeader
group by
    dateadd(dd, 0, datediff(dd, 0, OrderDate))
order by
    SaleDay
Run Code Online (Sandbox Code Playgroud)

的想法dateadd(dd, 0, datediff(dd, 0, OrderDate))是首先获取“从时间开始到您的日期经过的天数”(-部分datediff),然后将此天数添加到“时间开始”。这给了你“新的一天的开始”。我希望这是可以理解的:)