通常,我只会在代码本身中执行此操作,但是我很好奇能否在TSQL中有效完成此操作。

表格1
日期-值

表2
日期-折扣

表1包含每天的条目。表2仅包含折扣更改时的条目。在输入新折扣之前,应用于值的折扣才被视为有效。

示例数据:

表格1
2010年1月6日-10
2010年1月25日-9
2010年1月4日-8
2010年1月4日-9
2010/1/23-7
2010年1月2日-10
2010年1月1日-11

表2
2010年1月6日-2
2010年1月3日-1
2010年1月20日-0

我需要返回的内容如下:T1 Date - T1 Value - T2 Discount
示例数据:

2010年1月6日-10-2
2010年1月25日-9-1
2010年1月4日-8-1
2010年1月4日-9-1
2010/1/23-7-1
2010年1月2日-10-0
2010年1月1日-11-0

可能还是我最好继续在代码中执行此操作?

最佳答案

我相信这个子查询会做到这一点(未经测试)。

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

但是,也许不是表现最好的。

编辑:

测试代码:
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

结果:

2010-01-26 00:00:00.000 10 2
2010-01-25 00:00:00.000 9 1
2010-01-24 00:00:00.000 8 1
2010-01-24 00:00:00.000 9 1
2010-01-23 00:00:00.000 7 1
2010-01-22 00:00:00.000 10 0
2010-01-21 00:00:00.000 11 0

08-17 12:34