SQL根据日期从历史记录表中选择一个值
我有两个表,一个表A包含用户的付款数据,另一个表B包含用户的排名历史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
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您尝试过什么?你在哪里卡住了?让我们看看你的尝试。谢谢。这管用!