J'ai un ensemble d'enregistrements de stock.Sélection SQL excluant certaines plages
J'ai également un ensemble de dates pour lesquelles, même si je pourrais avoir des données, je ne peux pas négocier des actions.
voici l'exemple pour la configuration 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
Et voici le SELECT que je veux. Je sais qu'il doit y avoir une façon intelligente de le faire, mais je ne peux pas comprendre tout à fait dehors .....
select * from #stock_data
join ????
where ????
pour revenir
('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)
Alors, que la magie va dans le? ??? des blocs?
Heh, je creuse la logique en arrière de cette requête. Joignez les entrées exclues dans les entrées qu'ils excluent, puis prenez ce qui reste. – Dave
Génial. Jointure externe FTW! –