MySql根据另一个表中的MAX值选择一个表中的所有行

时间:2013-09-13 15:28:10

标签: mysql sql database join max

我希望能够从下面的表1和表3中获取所有数据,但除此之外,我还想从表2中获取最新的应用程序阶段。最新的应用程序阶段是通过获取max stage_date来确定的。每个申请。

表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更新这个。

1 个答案:

答案 0 :(得分: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;

编辑:

您可以使用以下内容加入申请人数据::

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;