2012-02-08 2 views
0

내가 같은 테이블에 뭔가가 어디 체크 대상 :MySQL은 : 행의 하위 집합을 사용하여 절

---------------------------------------- 
|uID|responseDate|field_01|field_02|etc| 
+---+------------+--------+--------+---+ 
| 1 | 2011-12-02 | yes | no | | 
| 2 | 2011-11-25 | no | yes | | 
| 1 | 2012-01-02 | no | yes | | 
| 2 | 2012-12-01 | no | no | | 
| 3 | 2010-01-02 | yes | no | | 
+---+------------+--------+--------+---+ 

내가 field_01의 최신 응답이 '예'입니다 누구를위한 UID 및 responseDates을 좀하고 싶습니다를 - 그래서 내 쿼리를 반환해야합니다 :

나는 내부 조인을 사용하고 있지만 잘못되었습니다. 여기 내 쿼리입니다 :이 반환 무엇

SELECT f.uID, f.responseDate 
FROM form_05 as f 
INNER JOIN (
    SELECT uID, max(responseDate) AS latest_date 
    FROM form_05 
    WHERE field_01 = 'yes' 
    GROUP BY uID) dmax 
ON dmax.uID = f.uID and dmax.latest_date = f.responseDate 
ORDER BY f.uID ASC; 

그러나 field_01은 '예, 각 UID, 즉 :

------------------ 
|uID|responseDate| 
+---+------------+ 
| 1 | 2011-12-02 | 
| 3 | 2010-01-02 | 
+---+------------+  

에 대한 최신 항목입니다 그러나 나는 그것을 원하지 않는다. 각 uID에 대한 최신 항목 만 테스트에 적합하도록하고 싶습니다. 어떻게 쿼리를 재구성 할 수 있습니까? 모든 포인터 크게 감사하겠습니다.

답변

2

이 시도를주고 그것이 작동하지 않는 경우 알려 : worked- 당신을 감사 그건

select t2.uid, t2.responseDate from t2 
left join (
    select t1.uid, max(t1.responseDate) as MaxDate from t1 
    group by t1.uid 
) as SubQuery on t2.uid = SubQuery.uid and t2.responseDate = SubQuery.MaxDate 
where MaxDate is not null and field_01 = "yes" 
+0

! 나는 지금 그것을 원래의 시도와의 차이점을 이해하기 위해 파싱 할 것이다. 다시 한 번 감사드립니다! – yycroman

+0

그래서 where 절을 조인 외부로 이동하는 것이 유일한 차이점입니다. 그게 뭐지? – yycroman

+0

솔직히 말해서 ... 나는 당신의 코드를 보지 않았다. :) 그러나 분명히 당신은이 상황에서 필연적이라고 생각하는 왼쪽 결합을 사용하지 않고있다. 이제 당신의 코드를 보았습니다. 나는 정말로 당신이 정말로 정말로 가까이에 있음을 알아 차렸습니다! –

관련 문제