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 列を含める必要があります

これら 2 つのクエリをマージして、20 日前からのクローズを取得しようとしていますが、このクエリを機能させることはできません。

クエリがテーブル在庫 k を実行すると、close_adj と close を取得する日付が -20 日前から変更されます。

4

1 に答える 1

0

@Gordonが述べたように、MySQLが(単一の)スカラー値を期待している複数の値を返すサブクエリがあります。1つの回避策は、あなたが持っていたものの代わりに使用する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 に答える