我有两张桌子看起来像这样:
IMP DATE CAT
A 03/03/2016 1
B 04/04/2016 1
C 09/09/2016 2
D 01/01/2017 1
E 02/02/2017 1
F 03/03/2017 2
G 04/04/2017 2
===================
EXP DATE CAT
H 01/01/2016 1
I 05/05/2016 1
J 07/07/2016 2
K 11/11/2016 2
L 01/01/2017 1
M 03/03/2017 1
N 04/04/2017 2
O 05/05/2017 2
我想将第一个表连接到第二个表,但是将第二个表中连接的行限制为第一个表(每个类别)上的最新日期。
我正在寻找的结果将是两个表格中的每一行,除了项目" M" (因为表1中的Cat 1具有2月的最新日期)和项目" O" (因为表1中的Cat 2最新日期为4月)。
我已经在第二张表格中的where子句中尝试了条件,但还没有达到目标。
有一种简单的方法吗?任何帮助表示赞赏。我顺便使用SQL Server 2008。
答案 0 :(得分:0)
您对问题的描述具体涉及使用join
。这表明这样的查询:
select . . .
from (select t1.*, max(t1.date) over (partition by t1.cat) as maxdate
from table1 t1
) t1 join
table2 t2
on t1.cat = t2.cat and t2.date <= t1.maxdate;
答案 1 :(得分:0)
欲望输出及其格式仍不明确。
你正在寻找这个吗?;With CTE as
(
select *, row_number()over(partition by cat order by DATEs desc) rn
from @table1
)
--select * from cte
--where rn=1
select * from cte t1
left join @table2 t2
on t1.CAT=t2.CAT and t2.DATEs<=t1.DATEs
where rn=1