2014-02-23 30 views
0

我得到了具体的查询:为什么MySQL查询不会返回最新的排

SELECT * 
FROM stats 
WHERE mod_name = 'module' 
GROUP BY domain 
ORDER BY addition_date DESC 

我想以检索,针对每一个域的最新值。我知道日期2014-02-19有一个域x.com值。

然而,这个查询将返回我行日期:2014年1月6日

这是相当简单的查询......为什么它不域采取小组,并采取只有最新的价值? 我错过了什么吗?

回答

2

order by发生group by。这就是为什么你的查询不起作用。这是一种方式来获得你想要的东西:

SELECT s.* 
FROM stats s 
WHERE mod_name = 'module' and 
     not exists (select 1 
        from stats s2 
        where s2.mod_name = s.mod_name and 
         s2.addition_date > s.addition_date 
       ) 
ORDER BY addition_date DESC; 

为了获得最佳性能,在stats(mod_name, addition_date)创建索引。

+0

所以这就是为什么我的结果是完全随机的。 TY! – Grzegorz

+0

我创建了一个不同的查询,不存在。 这是不是一个会更快?: SELECT * FROM \t \t \t(SELECT * FROM统计WHERE mod_name = '模块' ORDER BY addition_date DESC)作为AB \t \t \t \t GROUP BY域ORDER BY addition_date DESC – Grzegorz

+0

你正在使用明确记录为不工作的“group by”扩展:http://dev.mysql.com/doc/refman/5.7/en/group-by-extensions.html。此外,使用'not exists'的查询和适当的索引应该更快,因为它不需要对原始数据进行排序。 –

相关问题