在每日获得一列的总和

时间:2013-10-08 21:56:18

标签: sql sql-server-2008

我需要查询我的SQL 2008 R2,它根据日期计算列的总和,如

日期

10/7/2013 12:28:30
10/7/2013 01:28:30 
10/7/2013 03:04:30 
10/8/2013 06:03:51

100
102
200
300

我需要10/7/2013日期的总金额。
总金额
402

2 个答案:

答案 0 :(得分:1)

下面的范围过滤器会删除输入的时间部分,并将其与一天的范围进行比较。将表达式保留在where子句的右侧允许您在日期列上使用索引。

不要: where convert(date, getdate()) = @day 会导致表扫描。

改为

declare @yourTable table (dt datetime, qty int );
    insert into @yourTable
        select '10/7/2013 12:28:30', 100 union all
        select '10/7/2013 01:28:30', 102 union all
        select '10/7/2013 03:04:30', 200 union all
        select '10/8/2013 06:03:51', 300;

    declare @day datetime;
    set @day = '10/7/2013'

    select  sum(qty) 
    from    @yourTable
    where   dt >= dateadd(dd, datediff(dd, 0, @day), 0) and 
            dt < dateadd(dd, datediff(dd, 0, @day), 1)

答案 1 :(得分:0)

问题是当你“分组”时,你按照日期和时间进行分组。时间。您需要重新格式化datetime列,因此只需按日期进行分组。

有很多方法可以做到这一点。一个例子:

select CONVERT (date, GETDATE());

将当前日期时间转换为日期。

source