Reputation: 457
CREATE TABLE #TEMPTABLE
(
requestTime datetime2,
NoOfSessions integer
)
INSERT INTO #TEMPTABLE
select convert(nvarchar(16), TimeLog, 120) requestTime , COUNT(DISTINCT SessionId)As NoOfSessions
from LogData
group by convert(nvarchar(16), TimeLog, 120) order by requestTime;
select s1.requestTime
, (
select sum(NoOfSessions)
from #TEMPTABLE s2
where dateadd(minute, -15, s1.requestTime) < s2.requestTime
and s2.requestTime <= s1.requestTime
) as TotalNumberOfSessions
from #TEMPTABLE s1
DROP TABLE #TEMPTABLE
Upvotes: 2
Views: 110
Reputation: 25083
I don't think the temp table is the problem, but here's your code without it:
select s1.requestTime
, (
select sum(NoOfSessions)
from
(
select dateadd(minute, datediff(minute, 0, TimeLog), 0),
count(distinct SessionId)
from LogData
group by dateadd(minute, datediff(minute, 0, TimeLog), 0)
) s2
where dateadd(minute, -15, s1.requestTime) < s2.requestTime
and s2.requestTime <= s1.requestTime
) as TotalNumberOfSessions
from
(
select dateadd(minute, datediff(minute, 0, TimeLog), 0),
count(distinct SessionId)
from LogData
group by dateadd(minute, datediff(minute, 0, TimeLog), 0)
) s1
Upvotes: 0
Reputation: 171246
The temp table is not the problem. The problem is the correlated subquery causing an insane number of loop-join iterations.
Try reformulating the subquery as a join. Round the datetime value to minutes and join on the minutes value.
Upvotes: 0
Reputation: 139010
Try this and let me know. It might be some improvement for you.
I added a primary key on requestTime
in the temp table that can be used in the correlated sub query.
create table #TEMPTABLE
(
requestTime smalldatetime primary key,
NoOfSessions integer
)
insert into #TEMPTABLE
select dateadd(minute, datediff(minute, 0, TimeLog), 0),
count(distinct SessionId)
from LogData
group by dateadd(minute, datediff(minute, 0, TimeLog), 0)
select s1.requestTime
, (
select sum(NoOfSessions)
from #TEMPTABLE s2
where dateadd(minute, -15, s1.requestTime) < s2.requestTime
and s2.requestTime <= s1.requestTime
) as TotalNumberOfSessions
from #TEMPTABLE s1
drop table #TEMPTABLE
Upvotes: 1
Reputation: 62159
In general, the problem likely is this:
where dateadd(minute, -15, s1.requestTime) < s2.requestTime
I am not sure this can result in an efficient query plan - but then you do not show us the plan.
Upvotes: 0