MySQL MAX()函数返回错误的关联值

时间:2015-03-17 02:49:13

标签: mysql

我已经尝试了各种查询并阅读了不同的答案,似乎没有什么能够正确地提供我正在寻找的内容。建议表示赞赏。

我有一张包含物品,日期和数量的表格。对于每个项目,我需要最新的日期和相关数量。该表如下所示:

item   date         qty
1234   2014-12-22   300
1234   2015-02-13   500

运行此查询后:

SELECT item, MAX(date), qty
FROM table
GROUP BY item

我明白了:

item   date         qty
1234   2015-02-13   300

而不是qty 500。我尝试了几种不同的解决方案,包括thisthis。第一个在NULL中为date提供了所有记录。第二个似乎有效,直到我尝试SUM(qty)(对于任何给定的qtyitem可以有多个date。由于此解决方案按date降序排序,并且实际上并未删除任何数据,因此在此方案中无法提供帮助。

为什么我的原始查询不起作用?还有其他想法吗?

谢谢!

2 个答案:

答案 0 :(得分:1)

您的查询无效,因为mysql在使用group by这样时只返回任意行。事实上,大多数数据库甚至不会运行它。

有几种替代选择 - 这里有一个选择加入桌面:

SELECT t1.item, t1.date, t1.qty
FROM table t1 
    JOIN (select item, max(date) maxdate
          from table
          group by item) t2 ON t1.item = t2.item 
    and t1.date = t2.maxdate

答案 1 :(得分:0)

当然可以。您需要join才能获得所需内容:

select t.*
from table t join
     (select item, max(date) as maxd
      from table t
      group by item
     ) tmax
     on t.item = tmax.item and t.date = tmax.maxd;

您的查询应该失败,因为qty不在group by。 MySQL允许它,但任何其他数据库都会返回错误。