我需要查询我的 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
我需要 2013 年 10 月 7 日的总金额
TotalAmount
402
我需要查询我的 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
我需要 2013 年 10 月 7 日的总金额
TotalAmount
402
下面的范围过滤器删除了输入的时间部分并将其与一天的跨度进行比较。将表达式保留在 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)
问题是当您“分组依据”时,您是按日期和时间分组的。您需要重新格式化 datetime 列,因此它仅按日期分组。
有很多方法可以做到这一点。一个例子:
select CONVERT (date, GETDATE());
将当前日期时间转换为日期。
(来源)