Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

SQL-Join am Nächsten kleiner als Datum

Ich glaube, diese Unterabfrage wird es tun (nicht getestet).

select *, 
   (select top 1 Discount 
    from table2 
    where table2.Date <= t.Date 
    order by table2.Date desc) as Discount
from Table1 t
 

Vielleicht aber nicht die leistungsfähigste.

Bearbeiten:

Testcode:

create table #table1 ([date] datetime, val int)
create table #table2 ([date] datetime, discount int)

insert into #table1 ([date], val) values ('1/26/2010', 10)
insert into #table1 ([date], val) values ('1/25/2010', 9)
insert into #table1 ([date], val) values ('1/24/2010', 8)
insert into #table1 ([date], val) values ('1/24/2010', 9)
insert into #table1 ([date], val) values ('1/23/2010', 7)
insert into #table1 ([date], val) values ('1/22/2010', 10)
insert into #table1 ([date], val) values ('1/21/2010', 11)

insert into #table2 ([date], discount) values ('1/26/2010', 2)
insert into #table2 ([date], discount) values ('1/23/2010', 1)
insert into #table2 ([date], discount) values ('1/20/2010', 0)

select *, 
   (select top 1 discount 
    from #table2 
    where #table2.[date] <= t.[date]
    order by #table2.[date] desc) as discount
from #table1 t

drop table #table1
drop table #table2
 

Ergebnisse:

2010-01-26 00:00:00.000 10 22010-01-25 00:00:00.000 9 12010-01-24 00:00:00.000 8 12010-01-24 00:00:00.000 9 12010-01 -23 00:00:00.000 7 12010-01-22 00:00:00.000 10 02010-01-21 00:00:00.000 11 0