Я создал функцию sql в SQLServer 2008 , которая объявила временную таблицу и использует ее для вычисления скользящего среднего по значениям внутри
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,-@windowDays + 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 следующим образом:
with tempTable as
(
select * from aces.dbo.fEDVisitCounts('ALL', null,DATEADD(DD,-7,'01-09-2010'),
'04-09-2010',0,130,null,1, 0)
)
Вопрос: Есть ли существенное различие в этих двух подходах?Один быстрее, чем другой или более распространенный / стандартный? Я думаю, что объявление быстрее, так как вы определяете, какие столбцы вы ищете. Было бы также быстрее, если бы я опускал столбцы, которые былине используется в вычислениях скользящего среднего? (не уверен насчет этого, поскольку в любом случае он должен получить все строки, хотя при выборе меньшего числа столбцов интуитивно понятно, что это будет быстрее / меньше)
Iтакже нашел create temporary table @table
отсюда Как объявить внутреннюю таблицу в MySQL? , но я не хочу, чтобы таблица сохранялась вне функции (я не уверен, что это создает временная таблица создания илинет.)