Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 根据日期范围之间的子表中的最高日期从主表中选择行_Sql_Sql Server - Fatal编程技术网

Sql 根据日期范围之间的子表中的最高日期从主表中选择行

Sql 根据日期范围之间的子表中的最高日期从主表中选择行,sql,sql-server,Sql,Sql Server,对不起,标题很混乱 我有这张桌子: ApplicantID Applicant Name ------------------------------- 1 Sandeep 2 Thomas 3 Philip 4 Jerin 连同与上表相连的子表: DetailsID ApplicantID CourseName Dt ----------------

对不起,标题很混乱

我有这张桌子:

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
例如,当我从指定日期范围时,我希望获取applicationSID 2014年4月20日至2014年3月5日我应具备:

ApplicantID    Applicant Name
-------------------------------
3              Philip
4              Jerin
这意味着主表中必须在第二个表中的申请人以及第二个表中的最高日期必须在指定的日期范围内。希望情况清楚。

您需要在子查询中使用GROUP BY提取每个应用程序ID的最大值,然后加入该结果。这应该适合您:

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'
您需要在子查询中使用GROUP BY提取每个应用程序ID的最大值,然后加入该结果。这应该适合您:

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'

您可以使用窗口分析函数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

您可以使用窗口分析函数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

你试过什么了吗?你能给我们看看你有什么吗?看起来很直接,到目前为止你试过什么?到底是什么问题?你试过什么了吗?Dt列的格式是什么?你试过什么了吗?你能给我们看看你有什么吗?看起来很直接,到目前为止你试过什么?到底是什么问题?你试过什么了吗?Dt列的格式是什么?