MySQL: использование подмножества строк для проверки предложения where - PullRequest
0 голосов
/ 08 февраля 2012

У меня есть таблица примерно такая:

----------------------------------------
|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 подходила для теста.Как я могу реструктурировать запрос?Любые указатели приветствуются.

1 Ответ

2 голосов
/ 08 февраля 2012

Попробуйте и дайте мне знать, если это не сработает:

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"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...