2009-05-14 5 views
2

저는 mysql을 처음 접했을뿐입니다. 알아낼 수없는 쿼리가 필요합니다. 다음과 같은 테이블이 주어집니다 :칼럼 1과 칼럼 2마다 어떻게 최신 항목을 선택합니까?

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; 

....

을하지만이 느낌이 좋지 않습니다. 누구든지 올바른 방향으로 나를 가리킬 수 있습니까?

+0

이 테이블에 기본 키 (단일 키 또는 결합 키)가 있습니까? – Powerlord

답변

5

일해야하지만 테스트하지 않았습니다.

SELECT orders.* FROM orders 
INNER JOIN (
    SELECT emp, cat, MAX(date) date 
    FROM orders 
    GROUP BY emp, cat 
) criteria USING (emp, cat, date) 

기본적으로,이 각각의 EMP와 고양이에 대한 최신 항목을 얻을 수있는 하위 쿼리를 사용하여, 다음 원래 테이블에 대해 (해당 주문에 대한 모든 데이터를 얻을 수 있음을 조인 이후 할 수 있습니다 AMT 정액 BY하지 GROUP).

2

작동합니다 @ R.Bemrose에 의해 주어진 대답, 여기에 비교를 위해 또 다른 트릭 :

SELECT o1.* 
FROM orders o1 
LEFT OUTER JOIN orders o2 
ON (o1.emp = o2.emp AND o1.cat = o2.cat AND o1.date < o2.date) 
WHERE o2.emp IS NULL; 

이 열 (EMP, 고양이, 날짜)가 후보 키를 포함하는 것으로 가정합니다. 나는. 주어진 emp 쌍에 대해 단 하나의 날짜가있을 수 있습니다 & cat.

+0

@ R.Bremrose의 쿼리가 동일한 가정을합니다. – Andomar

+0

음, 그렇지 않습니다. Mine은 MAX (날짜)와 일치하는 각 emp 및 cat 행을 반환합니다. – Powerlord

+0

오른쪽 - OP는 emp & cat마다 * one * 행을 원했습니다. 솔루션과 광산 모두 emp & cat 당 여러 행을 반환 할 수 있습니다. –

관련 문제