Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.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,我有两个表,一个表A包含用户的付款数据,另一个表B包含用户的排名历史 Table A IDNO LName FName Start_Date PayType Current_Rank ------------------------------------------------------------ SJ01 Smith John 11/13/2016 Cert AC DJ01 Doe Jack 10/20/202

我有两个表,一个表A包含用户的付款数据,另一个表B包含用户的排名历史

Table A
IDNO   LName   FName  Start_Date   PayType     Current_Rank
------------------------------------------------------------
SJ01   Smith   John   11/13/2016   Cert             AC
DJ01   Doe     Jack   10/20/2020   Assignment       BC

Table B
IDNO  Date       Rank
----------------------
SJ01  10/01/2010  CAP
SJ01  10/01/2016  BC
SJ01  10/01/2020  AC
DJ01  01/01/2010  LT
DJ01  01/01/2015  CAP
DJ01  01/01/2020  BC
我需要根据表A中的开始日期显示用户的排名,并从表B中引入排名。因此,我的最终结果可以如下所示:

IDNO   LName   FName  Start_Date   PayType         Rank
------------------------------------------------------------
SJ01   Smith   John   11/13/2016   Cert             BC
DJ01   Doe     Jack   10/20/2020   Assignment       BC    
如何连接这两个表并比较日期,以便根据表A中的开始日期从历史表中引入排名?

这里有一种方法:

select a.* , c.Rank From TableA a
cross apply (select top 1 * from tableB b
        where a.IdNo = b.IDno 
        and a.Start_Date > b.date
        order by b.date desc
     ) c

另一个非常简单的方法是直接使用相关查询选择相应的秩

select a.*, 
 (select top(1) [rank] from TableB b
  where b.idno=a.idno and a.start_date>b.date
  order by b.date desc) as [Rank]
from TableA a
;使用CTE 像 选择A.IDNO、A.LName、A.FName、A.Start\U Date、A.PayType、B.Rank、RNo=按B.IDNO按B.Date DESC排序的行数超额分配 来自表B 在B.IDNO=A.IDNO和A.Start\u Date>=B.Date上联接表A 选择IDNO、LName、FName、开始日期、薪资类型、等级 来自CTE,其中RNo=1 按开始日期订购 选择idno、lname、fname、开始日期、付款类型、pp.rank当前等级 从…起 从中选择xx.idno、xx.rank、minxx.datediff 选择tableA.idno,tableA.start_date-tableB.date-datediff,tableB.rank 从表A到表B 其中tableA.idno=tableB.idno XX 分组依据xx.idno,xx.rankpp, 表 其中tableA.idno=pp.idno
@塞格:谢谢,但不完全是。查询为各个用户选择历史记录中的第一个等级。例如,它为John Smith选择CAP等级,其中它应该是BC等级。@LucasC922然后按b.date desc排序,请参见更新的ASN您尝试过什么?你在哪里卡住了?让我们看看你的尝试。谢谢。这管用!