Во-первых ... Я не понимаю, почему у вас есть глобальная временная таблица для этой цели.Похоже, вы храните слишком много дубликатов.В любом случае вы должны создать такой индекс:
CREATE INDEX IX_AllTransferMembers ON ##AllTransferMembers (CustNo)
В любом случае вы можете сделать то же самое с подзапросом, используя CTE, например:
WITH tmp_AllTransferMembers AS (
SELECT custno,count(custno) as countUse
FROM [OLBRET_COPY].[dbo].[ActivityLogs]
where ActivityCode in ('11020','11045','11053')
and DateTime >= '2018-12-20' and DateTime < '2018-12-26'
group by custno)
SELECT d.custno, ActivityCode, d.Amount, d.DateTime,
a.countUse, MobileDeviceMACId,ErrorMessage
,( select SUM(activitylogs.amount)
from [OLBRET_COPY].[dbo].[ActivityLogs]
where ActivityLogs.DateTime >= (d.DateTime-2)
and ActivityLogs.DateTime <= d.DateTime
and ActivityLogs.CustNo = d.CustNo
and ActivityLogs.ErrorMessage = '')
FROM [OLBRET_COPY].[dbo].[ActivityLogs] d
inner join tmp_AllTransferMembers a on d.CustNo = a.CustNo
where d.ActivityCode in ('11020','11045','11053')
and d.DateTime >= '2018-12-20'
and d.DateTime < '2019-01-01' --and ErrorCode in ('')
order by d.CustNo,d.DateTime
Вы должны убедиться, чточто у вас есть индекс ActivityLogs (CustNo, ErrorMessage, DateTime). Как вы заявили, вы не можете видеть план и воспроизводить его, поэтому непросто убедиться, что он будет работать лучше ...
Кроме того, предыдущийк вашему коду вы можете добавить две строки ниже, чтобы показать некоторые детали того, где это занимает время.Поскольку это отдельная таблица, она будет непростой, но может дать вам некоторую подсказку (подробности см. На вкладке «Сообщение» после выполнения запроса):
SET STATISTICS TIME ON;
SET STATISTICS IO ON;