sql server 2008 - SQL - need to determine implicit end dates for supplied begin dates -
consider following:
create table members ( memberid char(10) , groupid char(10) , joindate datetime ) insert members values ('1', 'a', 2010-01-01) insert members values ('1', 'c', 2010-09-05) insert members values ('1', 'b', 2010-04-15) insert members values ('1', 'b', 2010-10-10) insert members values ('1', 'a', 2010-06-01) insert members values ('1', 'd', 2001-11-30)
what best way select table, determining implied "leavedate", producing following data set:
memberid groupid joindate leavedate 1 2010-01-01 2010-04-14 1 b 2010-04-15 2010-05-31 1 2010-06-01 2010-09-04 1 c 2010-09-05 2010-10-09 1 b 2010-10-10 2010-11-29 1 d 2010-11-30 null
as can see, member assumed have no lapse in membership. [leavedate] each member status period assumed day prior next chronological [joindate] can found member in different group. of course simplified illustration of actual problem, includes couple more categorization/grouping columns , thousands of different members [joindate] values stored in no particular order.
something perhaps? self join, , select minimum joining date greater joining date current row - i.e. leave date plus one. subtract 1 day it.
you may need adjust date arithmetic particular rdbms.
select m1.* , min( m2.joindate ) - interval 1 day leavedate members m1 left join members m2 on m2.memberid = m1.memberid , m2.joindate > m1.joindate group m1.memberid , m1.groupid , m1.joindate order m1.memberid , m1.joindate
Comments
Post a Comment