Jane,Here is a solution that solves the problems above. The performance will depend strongly on there being a clustered index on (member_no, cov_start). The conditions were arranged written for such an index, but I'm not claiming they couldn't be bettered.I tried this will date conditions of the form "ALL a <> b" instead of "not exists ... a = b" which is equivalent but it wouldn't work.SELECT TOP 100 PERCENT P1.Member_no, P1.cov_start, P2.cov_stopFROM dbo.Cover P1 INNER JOIN dbo.Cover P2 ON P1.cov_start <= P2.cov_start AND P1.Member_no = P2.Member_noWHERE (NOT EXISTS (SELECT 1 AS pre1 FROM Cover AS Pre WHERE (Pre.member_no = P1.member_no) AND (Pre.cov_stop = DateAdd([d], - 1, P1.cov_start)))) AND (NOT EXISTS (SELECT 1 AS post1 FROM Cover AS Post WHERE (Post.member_no = P1.member_no) AND (Post.cov_start = DateAdd([d], 1, P2.cov_stop)))) AND (NOT EXISTS (SELECT 1 AS inter1 FROM Cover AS Inter WHERE ((Inter.member_no = P1.member_no) AND (Inter.cov_stop <= P2.cov_stop) AND (Inter.cov_start > P1.cov_start) AND (NOT EXISTS (SELECT 1 AS preint1 FROM Cover AS PreInt WHERE (PreInt.member_no = P1.member_no) AND (PreInt.cov_stop = DateAdd([d], - 1, Inter.cov_start)))))))ORDER BY P1.Member_no, P1.cov_start
michael