通常,我只会在代码本身中执行此操作,但是我很好奇能否在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