MySql select all rows in one table based on MAX value in another table

依然范特西╮ 提交于 2019-12-24 13:26:11

问题


I want to be able to get all the data from table 1 and table 3 below but in addition to this I also want to get the latest application stage from table 2. The latest application stage is determined by getting the max stage_date for each application.

Table 1: applications

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    

Table 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)  

EDIT: third table

Table 3: applicants

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    

Returned data set

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

Am struggling with this one and would appreciate any help.

PS. Tried to put an example of sqlfiddle but it's down at the minute. I'll update this with the sqlfiddle when it's back up if haven't had an answer before this.


回答1:


You can do this with a correlated subquery:

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:

You can joining in the applicant data with something like this::

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;


来源:https://stackoverflow.com/questions/18790011/mysql-select-all-rows-in-one-table-based-on-max-value-in-another-table

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!