I\'m struggling with the logic required to structure a sql select query in a stored procedure. My database works with stock market data. I have a table of trading dates for
Recursion is your answer. Here's how you can take your inner select statement and transform it into range rows. Recursion is available in SQL 2005 or above so I hope that works for you.
create table dates (dt datetime null)
go
insert into dates(dt) values('1/1/2012')
insert into dates(dt) values('1/2/2012')
insert into dates(dt) values('1/3/2012')
insert into dates(dt) values('1/4/2012')
insert into dates(dt) values('1/10/2012')
go
--Show raw data
select * from dates
go
--Define the recursive query
WITH RecursiveQuery (anchorDate, dt)
AS
(
-- Anchor member of recursive query
SELECT
anchorDate=dt,
dt
FROM
dates AS e
WHERE
NOT EXISTS(select 1 from dates where dateadd(day,-1,e.dt)=dt)
UNION ALL
-- Recursive member (notice join to RecursiveQuery)
SELECT
anchorDate=d.anchorDate,
e.dt
FROM
dates AS e
INNER JOIN RecursiveQuery AS d ON e.dt = dateadd(day,1,d.dt)
)
--Final Join
select
startdt=anchorDate,enddt=max(dt)
FROM
RecursiveQuery
group by anchorDate
order by anchorDate
