2013-09-13 4 views
1

Я хочу, чтобы получить все данные из таблиц 1 и 3 ниже, но в дополнение к этому я также хочу получить последнюю стадию приложения из таблицы 2. Последний этап приложения определяется путем получения max stage_date для каждого приложения.MySql выбрать все строки в одной таблице на основе значения MAX в другой таблице

Таблица 1: приложения

id | applicant_id | col_x | col_y | col_z 
----------------------------------------- 
10 300   a  b  c  
11 310   a  b  c  
12 320   a  b  c  
13 330   a  b  c  
14 340   a  b  c  

Таблица 2: application_progress

id | application_id | application_stage | stage_date | stage_notes 
------------------------------------------------------------------ 
1 10    DRAFT    2013-01-01 (NULL) 
2 10    APPLICATION   2013-01-14 (NULL) 
3 10    PHASE1    2013-01-30 (NULL) 
4 11    DRAFT    2013-01-01 (NULL) 
4 12    DRAFT    2013-01-01 (NULL) 
5 13    DRAFT    2013-01-01 (NULL) 
6 14    DRAFT    2013-01-01 (NULL) 
7 14    APPLICATION   2013-01-14 (NULL) 

РЕДАКТИРОВАТЬ: третий стол

Таблица 3: Заявители

id | applicant_name | applicant_address | programme_id 
------------------------------------------------------ 
300 Applicant 1  abc     1  
310 Applicant 2  xyz     2  
320 Applicant 3  xyz     2  
330 Applicant 4  xyz     2  
340 Applicant 5  xyz     2  

Возвращенные набор данных

applicant_id | applicant_name | current_stage 
--------------------------------------------------------- 
300   Applicant 1  PHASE1 
310   Applicant 2  DRAFT 
320   Applicant 3  DRAFT 
330   Applicant 4  DRAFT 
340   Applicant 5  APPLICATION 

борюсь с этим и был бы признателен за любую помощь.

PS. Попытался привести пример sqlfiddle, но он в одно мгновение. Я обновлю это с помощью sqlfiddle, когда он будет создан, если раньше не был ответа.

+0

Можете ли вы показать, что вы до сих пор пробовали в вашем запросе - опубликуйте его здесь, не нужно для скрипта SQL. –

ответ

3

Вы можете сделать это с помощью связанного подзапроса:

select a.*, 
     (select application_stage 
     from application_progress ap 
     where ap.application_id = a.id 
     order by stage_date desc 
     limit 1 
     ) MostRecentStage 
from applications a; 

EDIT:

Вы можете присоединиться в данных заявителя с чем-то вроде этого ::

select a.*, aa.*, 
     (select application_stage 
     from application_progress ap 
     where ap.application_id = a.id 
     order by stage_date desc 
     limit 1 
     ) MostRecentStage 
from applications a join 
    applicant aa 
    on a.applicant_id = aa.id; 
+0

Спасибо Гордон. Я пытаюсь расширить это ввести третью таблицу, так что я могу получить заявитель текущего состояние и подправил свой код следующим образом:. 'ВЫБРАТЬ заявитель *, \t (SELECT application_stage \t ИЗ application_progress \t РЕГИСТРИРУЙТЕСЬ приложение ON application_progress.application.id = applications.id \t ГДЕ application_progress.application_id = applications.id \t ORDER BY DESC application_progress.state_date \t LIMIT 1 \t) AS current_stage, ОТ заявителей; ' , но это не работает для меня. Как я могу настроить ваш код для этого? Спасибо. –

+0

@AdrianWalls. , , Я не вижу третьей таблицы в вашем коде. Просто ненужное соединение с «приложениями» в подзапросе. –

+0

Я добавил третью таблицу в исходное сообщение. Я хочу получить всех претендентов из таблицы претендентов вместе с текущим этапом их заявления? Не нужно ли мне присоединяться к приложениям и application_progress в подзапросе при выборе всех из претендентов в основном запросе? –

Смежные вопросы