我对mysql还不太熟悉,需要一个我无法理解的查询。给一张这样的桌子:
emp cat date amt cum
44 e1 2009-01-01 1 1
44 e2 2009-01-02 2 2
44 e1 2009-01-03 3 4
44 e1 2009-01-07 5 9
44 e7 2009-01-04 5 5
44 e2 2009-01-04 3 5
44 e7 2009-01-05 1 6
55 e7 2009-01-02 2 2
55 e1 2009-01-05 4 4
55 e7 2009-01-03 4 6
我需要选择每个“emp”和每个“cat”的最新日期事务。上表将生成如下内容:
emp cat date amt cum
44 e1 2009-01-07 5 9
44 e2 2009-01-04 3 5
44 e7 2009-01-05 1 6
55 e1 2009-01-05 4 4
55 e7 2009-01-03 4 6
我试过这样的方法:
select * from orders where emp=44 and category='e1' order by date desc limit 1;
select * from orders where emp=44 and category='e2' order by date desc limit 1;
....
但这感觉不对。有人能指点我正确的方向吗?
最佳答案
这应该有用,但我还没有测试过。
SELECT orders.* FROM orders
INNER JOIN (
SELECT emp, cat, MAX(date) date
FROM orders
GROUP BY emp, cat
) criteria USING (emp, cat, date)
基本上,这使用一个子查询来获取每个emp和cat的最新条目,然后将其与原始表连接以获取该订单的所有数据(因为不能按amt和cum分组)。
关于sql - 您如何选择第一列和第二列的最新条目?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/864870/