2016-04-26 96 views
0
SELECT 
    k.*, 
    y.exchange, 
     (
     SELECT 
      close AS close_20, 
      close_adj AS close_adj_20 
      FROM stocks k 
      WHERE 
       t = (
        SELECT z.t 
        FROM usa_stocks_daily_bar z 
        WHERE 
         t < k.t  
        ORDER BY z.t DESC 
        LIMIT 20          
        ) 
       AND id = k.id 
      LIMIT 1  
     ) 
FROM stocks k 
JOIN symbols y 
    ON k.id = y.id 
WHERE 
    (
    y.exchange = 'NASDAQ CM' OR 
    y.exchange = 'NASDAQ GM' 
    ) 
    AND k.t BETWEEN 20150101 AND 20150110 
ORDER BY t ASC 

得到错误#1241 - 操作数应包含1列(S)SQL错误 - #1241 - 操作数应包含1列(S)

尝试这两个查询合并在一起,以获得接近从20天前开始,但无法使此查询生效。

由于查询沿着表格库存k,获得close_adj的日期以及从-20天以前的关闭更改。

+0

你在'select'中有一个子查询,它返回两列。当然这不起作用。标量子查询预计在那里,只有一列是允许的。 –

回答

0

正如@Gordon提到的,你有一个子查询,它返回多个值,其中MySQL期望一个(单个)标量值。一种解决方法是使用WHERE IN来代替你所拥有的:

WHERE t IN 
(
    SELECT z.t 
    FROM usa_stocks_daily_bar z 
    WHERE t < k.t  
    ORDER BY z.t DESC 
    LIMIT 20          
) 
相关问题