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 列

尝试将这两个查询合并在一起,以从 20 天前开始,但无法使此查询正常工作。

随着查询沿表stocks k 运行,获取close_adj 和close 的日期从-20 天前开始发生变化。

4

1 回答 1

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                                    
)
于 2016-04-26T02:05:56.780 回答