如何在SQL中连接两个表,根据第一个表限制第二个表数据?

时间:2017-11-22 01:47:04

标签: sql sql-server sql-server-2008 date join

我有两张桌子看起来像这样:

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。

2 个答案:

答案 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