T-SQL将日期连接到另一列中具有非零值的最近日期

时间:2018-03-26 19:09:16

标签: sql sql-server tsql join

我有table

id    date  
1     2018-03-20
1     2018-02-05      
3     2018-03-18       
7     2018-03-12       

我有table_2

id    date_2         value
1     2018-03-20     0   
1     2018-03-19     100 
1     2018-02-05     50   
3     2018-03-18     200 

我想加入这些来生成一个看起来像这样的表:

id    date         date_2       value
1     2018-03-20   2018-03-19   100   
1     2018-02-05   2018-02-05   50
3     2018-03-18   2018-03-18   200   
7     2018-03-12   NULL         NULL

如果date对应于table_2中具有非零值的记录,则应返回该记录。如果date对应于table_2 value 0table_2中不存在的记录,那么最近date_2的记录应返回{}之前的{}}}(前提是它具有非零值)。

在表格中,date id1 date相关联的记录与2018-03-20 value相关联。因此,应返回0table_2 date_2的记录。

我如何加入这些表格才能得出这个结果?

1 个答案:

答案 0 :(得分:2)

使用外部申请:

根据ID也是加入的一部分的评论进行编辑

declare @t1 as table (id int,  date1 date)
insert into @t1 
values 
(1,     '2018-03-20')     
,(3,     '2018-03-18')

,(7,     '2018-03-12')  


declare @t2 as table(
id int,    date_2  date       ,value int)
insert into @t2
values
(1     ,'2018-03-20',     0   )
,(1     ,'2018-03-19'    , 100    )
,(3     ,'2018-03-18',     200) 



select t.* ,t2.date_2,t2.value
from @t1 t
outer apply (select top 1 date_2
                  , value 
             from @t2 t2 
             where t2.value>0 
                and t.date1>=t2.date_2 
                and t.ID=t2.ID
             order by t2.date_2 desc) t2

删除结果集