SQL选择排除某些范围

Eri*_* H. 1 sql

我有一组股票数据记录.

我也有一套日期,即使我可能有数据,我也无法交易股票.

以下是设置的示例DDL:

create table #stock_data
(
   symbol varchar (10) NOT NULL,
   asof datetime NOT NULL,
   price float NOT NULL
)
go

insert into #stock_data values ('IBM', '7/1/09', 100)
insert into #stock_data values ('IBM', '7/2/09', 100)
insert into #stock_data values ('IBM', '7/3/09', 100)
insert into #stock_data values ('IBM', '7/4/09', 100)
insert into #stock_data values ('IBM', '7/5/09', 100)
insert into #stock_data values ('IBM', '7/6/09', 100)
insert into #stock_data values ('IBM', '7/7/09', 100)
insert into #stock_data values ('IBM', '7/8/09', 100)
insert into #stock_data values ('IBM', '7/9/09', 100)

insert into #stock_data values ('MSFT', '7/1/09', 50)
insert into #stock_data values ('MSFT', '7/2/09', 50)
insert into #stock_data values ('MSFT', '7/3/09', 50)
insert into #stock_data values ('MSFT', '7/4/09', 50)
insert into #stock_data values ('MSFT', '7/5/09', 50)
insert into #stock_data values ('MSFT', '7/6/09', 50)
insert into #stock_data values ('MSFT', '7/7/09', 50)
insert into #stock_data values ('MSFT', '7/8/09', 50)
insert into #stock_data values ('MSFT', '7/9/09', 50)
go

create table #exclude_ranges
(
    symbol varchar (10) NOT NULL,
    asof_start datetime NOT NULL,
    asof_end datetime NOT NULL
)
go


insert into #exclude_ranges values ('IBM', '7/2/09', '7/2/09')
insert into #exclude_ranges values ('IBM', '7/6/09', '7/8/09')
insert into #exclude_ranges values ('MSFT', '7/1/09', '7/8/09')

go
Run Code Online (Sandbox Code Playgroud)

这是我想要的SELECT.我知道必须有一些聪明的方法来做到这一点,但我无法弄清楚.....

select * from #stock_data
join ????
where ????
Run Code Online (Sandbox Code Playgroud)

回来

('IBM', '7/1/09', 100)
('IBM', '7/3/09', 100)
('IBM', '7/4/09', 100)
('IBM', '7/5/09', 100)
('IBM', '7/9/09', 100)
('MSFT', '7/9/09', 50)
Run Code Online (Sandbox Code Playgroud)

那么什么魔法进入???? 块?

Joe*_*orn 5

SELECT * 
FROM #stock_data sd
LEFT JOIN #exclude_ranges er
    ON sd.symbol=er.symbol and sd.asof BETWEEN er.asof_start AND er.asof_end
WHERE er.symbol IS NULL
Run Code Online (Sandbox Code Playgroud)