1) Máte některá pole v klauzuli Partition By a Order By. To nedává smysl, protože pro každou budete mít pouze jednu hodnotu (sma.FastPer, sma.SlowPer). Tato pole můžete bezpečně odebrat z části funkce okna Seřadit podle.
2) Za předpokladu, že již máte indexy pro adekvátní výkon v "initialSmas i join initialSmas" a že již máte a indexujete pro (initialSmas.Symbol, initialSmas.Period, initialSmas.TradeDate), nejlepší, co můžete udělat, je zkopírovat smaComparisonsByPer do dočasná tabulka, kde můžete vytvořit index na (sma.Symbol, sma.FastPer, sma.SlowPer, sma.TradeDate)