2013-02-28 82 views
1

所以我有这个查询应该返回一些信息,如价格,打开,关闭等..最新条目。mysql max(date)不工作

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

但是,无论什么原因,它不会返回正确的信息。由于某种原因,认为最大日期是2013年2月14日,但如果我查看所有数据,最新的实际上是2013年2月27日。 在这种特殊情况下

$symbol = "AGNC" 

是否max函数不是在约会工作?

+0

历史表的结构是什么?日期列名称是什么? – 2013-02-28 14:10:56

回答

7

我想你想要这样的东西。我不喜欢使用ORDER BY条款来做这件事,因为有一些可能性(,尽管很少)该记录可能具有相同的最新date条目。

SELECT * 
FROM History 
WHERE symbol = $symbol AND 
     date = (SELECT MAX(date) FROM History) 
+0

那么工作..但我没有得到它。为什么/这有什么不同? – brandenwagner 2013-02-28 16:09:37

+0

@brandenwagner你是什么意思*为什么/如何不同?*? – 2013-02-28 16:11:15

+0

为什么显示正确的日期,但我原来的查询不是? – brandenwagner 2013-02-28 16:46:23

2

我的建议是不使用MAX可言;如果你想要做的仅仅是取在表中最新的入门的东西,你可以尝试:

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

这只要你date场实际上是宣布一个日期相关的MySQL字段类型作品完美,像datedatetime

由于JW在他的回答中指出,你可能想在你的ORDER BY语句添加更多的字段消除歧义具有完全相同的最新记录。

而且,你可以把它放到$符号加上引号,如果这是一个字符串字段(charvarchar等):

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

干杯!

+0

,这不会处理重复的权利?例如,http://www.sqlfiddle.com/#!2/d65b8/2 – 2013-02-28 14:56:57

+0

极限1部分将确保只有一条记录被返回,如果这是你的意思;如果多行具有相同的日期,它将选择其中一个并返回。它选择哪一个将取决于额外的ORDER BY字段(如果没有其他指定,则返回的记录不能保证是你正在寻找的那个。不过,我认为这是一种更有效的方法,因为它不会依靠运行一个子查询和一个MySQL函数... – 2013-02-28 21:39:46

+1

澄清我的最新评论 - 问题的作者声明他只想要最新的条目(不是条目)。假设他只需要一条记录,我的声明可以更有效地执行这个技巧,因为它不需要子查询。但是,如果作者确实需要在最大日期发布“全部条目”,那么您的陈述确实是最佳选择。干杯JW! – 2013-02-28 23:08:03

0

以下应该做你想要什么:

SELECT * 
FROM History h 
WHERE symbol = $symbol and 
     `date` = (select max(`date`) from History where symbol = $symbol) 
0

您可以使用别名表名 SELECT * 历史 WHERE符号= $符号与 日期=(SELECT MAX(日)从历史中)