1

だから私は、LATESTエントリの価格、始値、終値などの情報を返すはずのこのクエリを持っています。

SELECT * FROM History WHERE symbol = $symbol Having max(`date`);

しかし、何らかの理由で正しい情報が返されません。何らかの理由で、最大日付は 2013-02-14 であると考えられていますが、すべてのデータを見ると、実際には最新のものは 2013-02-27 です。この特定のケースでは

$symbol = "AGNC"

max関数は日付で機能しませんか?

4

4 に答える 4

8

このようなものが欲しいと思います。レコードが同じ最新のエントリを持っている可能性が (ほとんどありませんが) あるため、私はこの usingORDER BY句を行うのが好きではありません。date

SELECT  *
FROM    History
WHERE   symbol = $symbol AND
        date = (SELECT MAX(date) FROM History)
于 2013-02-28T14:10:33.927 に答える
2

私の提案はまったく使用MAXしていません。テーブル内の最新のエントリのみを取得したい場合は、次のことを試してください。

SELECT * FROM History WHERE symbol = $symbol ORDER BY date DESC LIMIT 1;

これは、フィールドが、 などのdate日付関連の MySQL フィールド タイプとして実際に宣言されている限り、完全に機能します。datedatetime

JW が彼の回答で指摘したように、ORDER BYステートメントにフィールドを追加して、まったく同じ日付を持つレコードのあいまいさを解消することができます。

charまた、文字列フィールド ( 、varcharなど)の場合は、 $symbol を引用符で囲みます。

SELECT * FROM History WHERE symbol = '$symbol' ORDER BY date DESC LIMIT 1;

乾杯!

于 2013-02-28T14:29:15.123 に答える
0

エイリアステーブル名を使用できます。

SELECT  *
FROM    History
WHERE   symbol = $symbol AND
date = (SELECT MAX(date) FROM History);
于 2013-02-28T16:37:01.653 に答える
0

以下はあなたが望むことをするはずです:

SELECT *
FROM History h
WHERE symbol = $symbol and
      `date` = (select max(`date`) from History where symbol = $symbol)
于 2013-02-28T15:58:21.240 に答える