sql - 计算多个日期的运行总计

标签 sql sql-server t-sql sql-server-2012 window-functions

请参阅问题底部的测试数据..

我有如下数据..

salesorder  datee
1          2016-11-10
1          2016-11-10
2          2016-11-09
2          2016-11-09

现在我想显示我的数据,如下所示

datee       Summ
2016-11-09  4
2016-11-10  6

所以我使用了下面的查询,这给了我确切的结果

select distinct 
datee,
sum(salesorder) over (order by datee)
from
#test

但是上述查询的问题是,它使用 Range 选项并使用磁盘假脱机(如果工作表有记录,那么它是基于磁盘的假脱机),而不是在内存假脱机中。您可以使用下面的方法验证相同的内容

set statistics io on
select distinct 
datee,
sum(salesorder) over (order by datee)
from
#test

Table 'Worktable'. Scan count 3, logical reads 21, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0. Table '#test_______________________________________________________________________________________________________________00000001A8B8'. Scan count 1, logical reads 1, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

获取 InMemory 假脱机的一种方法是使用如下所示的 Rows 选项

select 
datee,
sum(salesorder) over ( order by datee rows between  unbounded preceding and  current row )
from
#test

上面的查询使用 InMemory spool,速度非常快,但输出不是我想要的..下面是输出

datee       summ
2016-11-09  2
2016-11-09  4
2016-11-10  5
2016-11-10  6

与 Disk spool 相比,InMemoryspool 速度非常快。这在此处记录:Microsoft SQL Server 2012 High-Performance T-SQL Using Window Functions (Developer Reference)

所以我的问题是:
我如何使用 InMemory Spool 并获得我想要的结果。我尝试了各种框架选项,但没有得到想要的结果

测试数据:

create table #test
(
salesorder int,
datee date
)
go

insert into #test
select 1,getdate()-1
go 2


insert into #test
select 2,getdate()-2
go 2

注意:
如果我没有重复的日期,则行选项将起作用,但我的数据设置是这样的,并且我有数千条记录,例如示例

更新:
这是大型查询的一部分,因此我更喜欢窗口函数(不带 CTE 或派生表)以避免重写

最佳答案

select distinct T1.dattee,X.Summ from SalesTab T1
    CROSS APPLY (SELECT SUM(T2.SalesOrder) SUMM FROM SalesTab T2 WHERE T2.dattee<=T1.dattee) X
    ORDER BY T1.Dattee

关于sql - 计算多个日期的运行总计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40550925/

相关文章:

sql - 分组,同时将上一行值添加到下一行

c# - 缺少表定义的 SQL 条件

sql - NOT IN 子句中的 NULL 值

SQL Server 包含

sql-server - ASP.NET MVC 中的 ACL

sql-server - 将 T-SQL 左连接子查询转换为 MS-Access

php - 按时间戳选择 block 顺序并按 id 随机化

sql - "Non-deterministic User-Defined functions can be used in a deterministic manner"是什么意思?

python - 通过 dsn 错误的 ODBC 连接

sql-server - SQL Server 中的类型 "void"是什么?