2012-02-08 26 views
0

我有一個表是這樣的: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 | | 
+---+------------+--------+--------+---+ 

我想獲得UID和responseDates爲誰field_01的最新迴應是肯定的 - 所以我的查詢應該返回:

------------------ 
|uID|responseDate| 
+---+------------+ 
| 3 | 2010-01-02 | 
+---+------------+ 

我使用的是內部聯接,但不正確。這裏是我的查詢:

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; 

這是什麼返回,但是,對每個UID其中field_01是肯定的,即:

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

最新的條目,但我不希望這樣。我想這樣做只有每個uID的最新條目纔有資格參加測試。我如何重構查詢?任何指針都非常感謝。

回答

2

試試這個,讓我知道,如果它不工作:

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 2012-02-08 05:41:25

+0

所以,移動連接之外的Where子句是我能找到的唯一區別。那是什麼? – yycroman 2012-02-08 05:43:36

+0

說實話...我沒有看你的代碼:)但顯然你不是使用左連接,我認爲這是必須在這些情況下。現在,我看到你的代碼,我注意到你真的在哪裏真的接近! – 2012-02-08 05:50:26