我对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
Run Code Online (Sandbox Code Playgroud)
我需要根据'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
Run Code Online (Sandbox Code Playgroud)
我尝试过类似的东西:
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;
Run Code Online (Sandbox Code Playgroud)
....
但这感觉不对.谁能指出我正确的方向?
这应该有效,但我还没有测试过.
SELECT orders.* FROM orders
INNER JOIN (
SELECT emp, cat, MAX(date) date
FROM orders
GROUP BY emp, cat
) criteria USING (emp, cat, date)
Run Code Online (Sandbox Code Playgroud)
基本上,这使用子查询来获取每个emp和cat的最新条目,然后将其连接到原始表以获取该订单的所有数据(因为您不能GROUP BY amt和cum).
| 归档时间: |
|
| 查看次数: |
950 次 |
| 最近记录: |