我对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/

10-11 05:15