我已经尝试了各种查询并阅读了不同的答案,似乎没有什么能够正确地提供我正在寻找的内容。建议表示赞赏。
我有一张包含物品,日期和数量的表格。对于每个项目,我需要最新的日期和相关数量。该表如下所示:
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
。我尝试了几种不同的解决方案,包括this和this。第一个在NULL
中为date
提供了所有记录。第二个似乎有效,直到我尝试SUM(qty)
(对于任何给定的qty
,item
可以有多个date
。由于此解决方案按date
降序排序,并且实际上并未删除任何数据,因此在此方案中无法提供帮助。
为什么我的原始查询不起作用?还有其他想法吗?
谢谢!
答案 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允许它,但任何其他数据库都会返回错误。