2011-07-10 40 views
1

我可以使用SQL查询成功地计算一个股票的200天移动平均线,我正在尝试创建一个VIEW。我被困在下面的查询似乎是合乎逻辑,但有一个SQL错误 “#1054 - 未知列‘equity.TickerID’在‘where子句’”需要帮助解决这个SQL查询

SELECT AVG(Close) AS MA200 FROM equity 
INNER JOIN 
(
    SELECT Close 
    FROM equity_pricehistory 
    WHERE TickerID = equity.TickerID 
    ORDER BY Timestamp 
    DESC LIMIT 0,200 
) as Y 
+0

我相信视图不支持子查询。不过,我可能是错的。 –

+1

子查询有其自己的范围。 – bernie

+0

亚当,我有兴趣知道,我想尽可能在​​SQL中实现。我正在尽量避免编写尽可能多的C++实用程序。 – user805547

回答

0

明白了。这将做到这一点。

SELECT equity.id, AVG(equity_pricehistory.close) AS MA200 
FROM equity 
INNER JOIN equity_pricehistory ON equity_pricehistory.TickerID = equity.id 
GROUP BY equity_pricehistory.TickerID 
ORDER BY Timestamp DESC 
LIMIT 0 , 200 

有一件事我要指出的是,你可以完全忽略整个equity表,如果你已经知道你想要的是equity_pricehistory的TickerIDs。

+0

感谢您的建议,但我试图用MA200为所有10,000+代币返还一张桌子。它看起来像这个查询不会那样做。 – user805547

+0

你能给我们你的模式吗?我不确定我了解列的哪些列是TickerID,close,timestamp,哪些列是 – Swift

+0

。表股权,tickerID 。在英语中,股票包含股票代号的列表。价格历史记录是包含所有代号的所有每日报价的大表格。我想生成一个查询,获取所有代号的MA200表。 – user805547