0

私はこのクエリを持っています:

SELECT 
    s.last_spread, s.sd, s.mean, s.id
    ,c.id_ticker, c.coef
    ,t.ticker
    ,/*p.last,*/ p.price

FROM (SELECT * FROM spreads WHERE spreads.id_check=1 LIMIT 60,896) as s 

    INNER JOIN coef as c 
        ON c.id_spread = s.id

    INNER JOIN tickers AS t
            ON t.id = c.id_ticker

    LEFT JOIN (SELECT prices.id_ticker, MAX(prices.date) as last, prices.price FROM prices GROUP BY prices.id_ticker) AS p
            ON p.id_ticker = t.id

ORDER BY s.id, c.id

最後の JOIN が正しい値を返さない....ティッカーの LAST PRICE を取得する必要があります (したがって、各ティッカーの最後の行)。

現時点では最初の価格が返されていますが、クエリ全体を変更して各 ticker.id の最終価格を取得するにはどうすればよいですか? ( p.id_ticker = t.id)

ありがとう!

4

3 に答える 3

3

次のサブクエリに order by を追加します。

SELECT prices.id_ticker, MAX(prices.date) as last, prices.price 
FROM prices GROUP BY prices.id_ticker 
order by prices.id_ticker desc
于 2012-04-25T08:52:38.603 に答える
2

A having 句を使用するとエレガントになります。

LEFT JOIN (SELECT prices.id_ticker, prices.date as last, prices.price FROM prices GROUP BY prices.id_ticker HAVING prices.date = MAX(prices.date) )

編集:しかし、それは機能しません...(以下のコメントを参照)

于 2012-04-25T08:55:55.250 に答える
1

ORDER BYと aを使用して、 LIMIT1 つの価格 (最後の価格) のみを取得します。

于 2012-04-25T08:56:08.510 に答える