Sql 分解查询并将一个查询的结果传递给另一个查询

Sql 分解查询并将一个查询的结果传递给另一个查询,sql,sql-server-2008-r2,Sql,Sql Server 2008 R2,我有一个问题,似乎有效,但它需要永远。我在想,如果我将查询一分为二,并将第一个查询的结果传递给第二个查询,那么它可能会更高效 其思想是,该表包含许多符号的数据。是否有一种方法可以仅查询表中的符号='AAPL',例如,然后将该结果集传递到下一个查询中 这是在SQLServer2008R2上 SELECT T1.CompSymbol, T1.TradeDate, T1.Expiry, MIN(T2.Expiry) AS 'FrontMonthContract'

我有一个问题,似乎有效,但它需要永远。我在想,如果我将查询一分为二,并将第一个查询的结果传递给第二个查询,那么它可能会更高效

其思想是,该表包含许多符号的数据。是否有一种方法可以仅查询表中的符号='AAPL',例如,然后将该结果集传递到下一个查询中

这是在SQLServer2008R2上

SELECT 
    T1.CompSymbol, 
    T1.TradeDate, 
    T1.Expiry, 
    MIN(T2.Expiry) AS 'FrontMonthContract' ,   
    MIN(T1.CompATMSynthStrike) AS 'CompATMSynthStrike',
    MIN(T1.CompATMSynthIV) AS 'CompATMSynthIV'   
FROM 
    BandHistory1M T1, BandHistory1M T2 
WHERE T1.TradeDate <= T2.Expiry AND T1.CompSymbol = 'AAPL'
GROUP BY T1.CompSymbol , T1.TradeDate, T1.Expiry
选择
T1.1符号,
T1.交易日期,
T1.到期日,
最低(T2到期日)为“FrontMonthContract”,
最小值(T1.CompATMSynthStrike)为“CompATMSynthStrike”,
MIN(T1.CompATMSynthIV)作为“CompATMSynthIV”
从…起
波段历史1M T1,波段历史1M T2
其中T1.TradeDate(到期日)
WriteLine(“{0}{1}{2}”、Symbol.CompSymbol、Symbol.TradeDate、Symbol.Expiry);
}
}
Console.ReadLine();
}
}
}

如果没有表Defs,我只是在猜测,但请像这样尝试:

(哎呀,第一个坏了…)

甚至可能是这样:

SELECT 
    T1.CompSymbol, 
    T1.TradeDate, 
    T1.Expiry, 
    MIN(T2.Expiry) AS 'FrontMonthContract' ,   
    MIN(T1.CompATMSynthStrike) AS 'CompATMSynthStrike',
    MIN(T1.CompATMSynthIV) AS 'CompATMSynthIV'   
FROM BandHistory1M T1
JOIN BandHistory1M T2  ON T1.TradeDate <= T2.Expiry
GROUP BY T1.CompSymbol , T1.TradeDate, T1.Expiry
HAVING T1.CompSymbol = 'AAPL'
选择
T1.1符号,
T1.交易日期,
T1.到期日,
最低(T2到期日)为“FrontMonthContract”,
最小值(T1.CompATMSynthStrike)为“CompATMSynthStrike”,
MIN(T1.CompATMSynthIV)作为“CompATMSynthIV”
来自BandHistory1M T1

在T1.TradeDate加入BandHistory1M T2。请发布查询代码。同时,用您正在使用的RDBMS标记您的问题。在其他新闻中,将查询拆分为更小的部分而不进行进一步优化不会带来任何好处。这实际上可能会降低性能。您打算如何处理该查询?这是一个非常简单的聚合查询。我认为您无法优化语句本身,因此应该考虑创建索引。SSMS实际上以这种方式为您提供了非常好的提示-您是否查看了估计/实际执行计划?SSMS如何提供这些提示?我不明白你问“你看了估计的/实际的执行计划了吗?”是什么意思。如果你身边有DBA,就和他们谈谈。否则,您需要阅读以下内容:
SELECT 
    T1.CompSymbol, 
    T1.TradeDate, 
    T1.Expiry, 
    MIN(T2.Expiry) AS 'FrontMonthContract' ,   
    MIN(T1.CompATMSynthStrike) AS 'CompATMSynthStrike',
    MIN(T1.CompATMSynthIV) AS 'CompATMSynthIV'   
FROM BandHistory1M T1
JOIN BandHistory1M T2  ON T1.TradeDate <= T2.Expiry
GROUP BY T1.CompSymbol , T1.TradeDate, T1.Expiry
HAVING T1.CompSymbol = 'AAPL'