2016-01-18 89 views
2

我有一個在S&P500指數上交易的每隻股票的歷史股票價格表。嵌套查詢(基於同一張表)

每個工作日,500新記錄插入到表historical_prices

符號,close_date,close_price。

該進程經常失敗,原因很多,只有一小部分記錄被添加。

星期四正確運行(500條新記錄),星期五失敗(僅添加400條記錄)。

我需要確定未添加的剩餘100條記錄,以重新運行並完成該過程。

嵌套查詢是最有效的方法嗎?從週四選擇500條記錄,並從週五開始測量400條記錄)

SELECT * FROM historical_prices 
WHERE `close_date` = '2016-01-16' 

RIGHT JOIN (
    SELECT * FROM historical_prices 
    WHERE `close_date` = '2016-01-15') 
WHERE `symbol` IS NULL; 

感謝高級!

回答

0

你可以這樣說:

SELECT * FROM historical_prices 
WHERE `close_date` = '2016-01-16' 
AND `symbol` NOT IN (
    SELECT `symbol` FROM historical_prices 
    WHERE `close_date` = '2016-01-15' 
) 
0

在這種情況下,子查詢NOT IN將很容易理解。子查詢NOT EXISTS會快一點。

SELECT * FROM historical_prices h1 
WHERE h1.`close_date` = '2016-01-16' 
AND NOT EXISTS (
    SELECT 1 FROM historical_prices h2 
    WHERE h2.`close_date` = '2016-01-15' and h2.`symbol = h1.`symbol` 
)