1

所以我有这个查询,它应该返回一些信息,如价格、开盘价、收盘价等。对于最新的条目。

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

但无论出于何种原因,它都没有返回正确的信息。出于某种原因,它认为最大日期是 2013 年 2 月 14 日,但如果我查看所有数据,最新的数据实际上是 2013 年 2 月 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 字段类型,例如date,datetime等,这就会完美地工作。

正如 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 h
WHERE symbol = $symbol and
      `date` = (select max(`date`) from History where symbol = $symbol)
于 2013-02-28T15:58:21.240 回答
0

您可以使用别名表名:

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