Eric,


Here is the code that does the job. (MSSQLl2K)


It's not very pretty but it works.


/* Create table with demo info */


declare @memberinfo table(
memberId char(1),
startDate datetime,
endDate datetime
)


insert into @memberinfo(memberId, startDate, endDate)
values('A','07/31/2003','07/31/2004')
insert into @memberinfo(memberId, startDate, endDate)
values('A','07/31/2002','07/31/2003')
insert into @memberinfo(memberId, startDate, endDate)
values('A','07/31/2001','07/31/2002')
insert into @memberinfo(memberId, startDate, endDate)
values('B','08/01/2003','08/31/2004')
insert into @memberinfo(memberId, startDate, endDate)
values('B','08/01/2003','08/31/2004')
insert into @memberinfo(memberId, startDate, endDate)
values('B','07/31/2001','07/31/2002')


declare @holding table(
recid int identity(1,1),
memberid char(1),
startDate datetime,
endDate datetime
)


/* start processing */
declare @finalTable table(
recid int identity(1,1),
memberid char(1),
startDate datetime,
endDate datetime
)


insert into @holding(memberId, startDate, endDate)
select memberId, startDate, endDate
from @memberinfo
order by memberId, startDate


declare @mbrId char(1)
declare @strtDt datetime
declare @endDt datetime


DECLARE mycursor CURSOR FOR
   SELECT memberId, startDate, endDate
   FROM @holding
order by memberId, startDate


   OPEN mycursor
   FETCH NEXT FROM mycursor INTO @mbrId, @strtDt, @endDt


   WHILE @@FETCH_STATUS = 0
   BEGIN
      
if(@mbrId not in (select distinct memberId
     from @finalTable))
begin
  insert into @finalTable(memberId, startDate, endDate)
  values(@mbrId, @strtDt, @endDt)
end
else
begin
  if(@strtDt <= (select max(endDate)
     from @finalTable
     where memberId = @mbrId))
  begin
   update @finalTable
   set endDate = @endDt
   where memberId = @mbrId
   and endDate = (select max(endDate)
      from @finalTable
      where memberId = @mbrId)
  end
  else
  begin
   insert into @finalTable(memberId, startDate, endDate)
   values(@mbrId, @strtDt, @endDt)
  end
end

fetch next from mycursor into @mbrId, @strtDt, @endDt
   END


   CLOSE mycursor
   DEALLOCATE mycursor


select * from @finalTable


The output was:
1 A 2001-07-31 00:00:00.000 2004-07-31 00:00:00.000
2 B 2001-07-31 00:00:00.000 2002-07-31 00:00:00.000
3 B 2003-08-01 00:00:00.000 2004-08-31 00:00:00.000


So what do I get? :)


-----Original Message-----
From: Eric Creese [mailto:[EMAIL PROTECTED]
Sent: Thursday, November 06, 2003 4:26 PM
To: CF-Talk
Subject: RE: SQL Challenge

Has to be in SQL. Will need to put it in a Stored Proc at some point.

  _____  


[Todays Threads] [This Message] [Subscription] [Fast Unsubscribe] [User Settings]

Reply via email to