請參閱有關測試數據的問題的底部..計算運行總和的多個日期
我有一個像下面的數據..
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
但上述查詢的問題是,它使用範圍選項並使用磁盤假脫機(如果工作表有記錄,那麼它是基於磁盤的假脫機),而不是在內存假脫機中。您可以使用下面的驗證相同
set statistics io on
select distinct
datee,
sum(salesorder) over (order by datee)
from
#test
表'工作臺'。掃描計數3,邏輯讀取21,物理讀取0,預讀讀取0,lob邏輯讀取0,lob物理讀取0,lob預讀取讀取0. 表'#test _______________________________________________________________________________________________________ 00000001A8B8'。掃描計數1,邏輯讀取1次,物理讀取0,預讀0,lob邏輯讀取0,lob物理讀取0次,lob預讀0
一種方式來獲得InMemory閥芯是使用行選擇像下面
select
datee,
sum(salesorder) over (order by datee rows between unbounded preceding and current row)
from
#test
上述查詢使用InMemory閥芯和速度非常快,但輸出是不是我want..below是輸出
datee summ
2016-11-09 2
2016-11-09 4
2016-11-10 5
2016-11-10 6
InMemoryspool是非常快的比較磁盤spool.this記錄在這裏:Microsoft SQL Server 2012 High-Performance T-SQL Using Window Functions (Developer Reference)
所以我的問題是:
如何使用InMemory閥芯和得到的結果與我不同的取景選擇want.I嘗試過,但我沒有得到期望的結果
測試數據:
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或派生表),以避免重寫
你嘗試過不同的選擇日期CROSS應用到日e銷售訂單的總和? – Cato
我想,即使我使用交叉應用不同的日期,我不會得到累計總和,進一步這是一個大型查詢的一部分,所以我更喜歡窗口函數,以避免重寫 – TheGameiswar
如果您將派生表放入CTE ,不會避免重寫? –