我在的SQLServer 2008該聲明的臨時表,並用它來計算內部與vs一起使用聲明臨時表:性能/差異?
declare @tempTable table
(
GeogType nvarchar(5),
GeogValue nvarchar(7),
dtAdmission date,
timeInterval int,
fromTime nvarchar(5),
toTime nvarchar(5),
EDSyndromeID tinyint,
nVisits int
)
insert @tempTable select * from aces.dbo.fEDVisitCounts(@geogType, @hospID,DATEADD(DD,[email protected] + 1,@fromDate),
@toDate,@minAge,@maxAge,@gender,@nIntervalsPerDay, @nSyndromeID)
INSERT @table (dtAdmission,EDSyndromeID, MovingAvg)
SELECT list.dtadmission
, @nSyndromeID
, AVG(data.nVisits) as MovingAvg
from @tempTable as list
inner join @tempTable as data
ON list.dtAdmission between data.dtAdmission and DATEADD(DD,@windowDays - 1,data.dtAdmission)
where list.dtAdmission >= @fromDate
GROUP BY list.dtAdmission
上的值的移動平均線,但我也發現了,你可以聲明不是Temptable這樣創建的SQL函數:
with tempTable as
(
select * from aces.dbo.fEDVisitCounts('ALL', null,DATEADD(DD,-7,'01-09-2010'),
'04-09-2010',0,130,null,1, 0)
)
問:這兩種方法有什麼主要區別嗎?比其他或更常見/標準更快嗎?因爲你定義了你正在尋找的列是什麼,所以我認爲declare更快。如果我要省略在移動平均數的計算中未使用的列,它會更快嗎?(不確定這個一個因爲它必須得到所有的行反正,但選擇較少的列使直覺感覺它會更快/更少做)
我也從這裏找到了create temporary table @table
How to declare Internal table in MySQL?但我不想要表(我不確定創建臨時表是否執行此操作)
下面是運行平均值的兩個示例,不需要臨時表,您可能希望嘗試以獲得可能的性能改進:https://stackoverflow.com/questions/911326/sql-select-statement-for-calculating -a-running-average-column https:// stackoverflow。com/questions/26618353/t-sql-calculate-moving-average – 2017-06-06 02:13:19