SQL选择不包括某些范围
问题描述:
我有一组库存数据记录。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
而这里的选择我想要的。我知道一定是一些聪明的办法做到这一点,但我不能完全弄清楚.....
select * from #stock_data
join ????
where ????
返回
('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)
那么,什么魔法进入? ???块?
答
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
答
尝试......
select * from stock_data s
left join exclude_ranges e
on e.symbol = s.symbol
and s.asof between e.asof_start and e.asof_end
Where e.symbol is null
嘿,我掏该查询的向后逻辑。将排除条目加入它们排除的条目中,然后拿走剩下的条目。 – Dave 2009-07-17 14:19:21