2014-11-21 27 views
0

对于令人困惑的标题,抱歉。根据日期范围内的子表中的最高日期从主表中选择行

我有这个表:

ApplicantID Applicant Name 
------------------------------- 
1    Sandeep 
2    Thomas 
3    Philip 
4    Jerin 

随着其与上表中连接该子表:

DetailsID  ApplicantID  CourseName  Dt 
--------------------------------------------------------------------- 
1     1    C1    10/5/2014 
2     1    C2    10/18/2014 
3     1    c3    7/3/2014 
4     2    C1    3/2/2014 
5     2    C2    10/18/2014 
6     2    c3    1/1/2014 
7     3    C1    1/5/2014 
8     3    C2    4/18/2014 
9     3    c3    2/23/2014 
10     4    C1    3/15/2014 
11     4    C2    2/20/2014 
12     4    C2    2/20/2014 

我想applicantsID,例如,当我指定日期范围从 4/20/20143/5/2014我应该有:

ApplicantID Applicant Name 
------------------------------- 
3    Philip 
4    Jerin 

这意味着主表中的申请人必须在第二个表格中,也是第二个表格的最高日期必须落在指定的日期范围内。希望情况很清楚。

+1

你试过什么了吗?你能告诉我们你有什么吗? – bowlturner 2014-11-21 15:58:13

+0

看起来相当直接,你到目前为止尝试过什么? – Andrew 2014-11-21 15:58:14

+0

究竟是什么问题?你尝试过什么吗? – tinySandy 2014-11-21 15:59:20

回答

1

您需要将ApplicantIdMAX拉到GROUP BY的子查询中,然后JOIN得到该结果。这应该为你工作:

Select A.ApplicantId, A.[Applicant Name] 
From ApplicantTableName A 
Join 
(
    Select D.ApplicantId, Max(D.Dt) DT 
    From DetailsTableName D 
    Group By D.ApplicantId 
) B On A.ApplicantId = B.ApplicantId 
Where B.DT Between '03/05/2014' And '04/20/2014' 
3

您可以使用窗口解析函数row_number让申请人在指定时间内的最大日期。

select T1.[ApplicantID], [Applicant Name] 
from Table1 T1 
join (select [ApplicantID], 
       ROW_NUMBER() over (partition by [ApplicantID] order by Dt desc) as rn 
     from Table2 
     where Dt BETWEEN '3/5/2014' AND '4/20/2014' 
    ) T 
on T1.[ApplicantID] = T.[ApplicantID] 
and T.rn =1 
相关问题