2012-02-08 12 views
0

に対してチェックする行のサブセットを使用して私はこのようなテーブルに何か持っている:私はfield_01に、最新の応答が「はい」である誰のためのUIDとresponseDatesを取得したいと思いのMySQL:where句

---------------------------------------- 
|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 | | 
+---+------------+--------+--------+---+ 

を - 私のクエリは返されるはずです:

私は内部結合を使用していますが、間違っています。ここに私のクエリです:これは返す何

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節をjoinの外に移動することは、私が見つけることができる唯一の違いです。それは何でしたか? – yycroman

+0

正直言って...私はあなたのコードを見ていない:)しかし、明らかにあなたは左の参加を使用していない、私はそれがこのような状況で必須だと思う。今私はあなたのコードを見て、私はあなたが本当に本当に近くにいることに気付きました! –