Solved it in pure SQL just for fun, it's up to you to decide if it's performant enough :)
Test data:
CREATE TABLE yourTable
(`id` int, `date` varchar(9), `col1` varchar(2), `col2` int, `col3` int, `col4` int, `col5` int, `col6` int)
;
INSERT INTO yourTable
(`id`, `date`, `col1`, `col2`, `col3`, `col4`, `col5`, `col6`)
VALUES
(1, '24-jan-11', 'n1', 89, 17, 81, 6, 40),
(2, '24-jan-11', 'n1', 21, 15, 42, 67, 11),
(3, '24-jan-11', 'n1', 31, 17, 45, 70, 69),
(4, '24-jan-11', 'n1', 74, 88, 47, 56, 14),
(5, '28-jan-11', 'n2', 31, 25, 75, 37, 84),
(6, '28-jan-11', 'n2', 15, 4, 20, 34, 68),
(7, '28-jan-11', 'n2', 19, 15, 81, 14, 67),
(8, '28-jan-11', 'n2', 47, 17, 15, 71, 14)
;
And here it comes:
select
yt1.id, yt2.id,
case when yt1.col2 in (yt2.col2, yt2.col3, yt2.col4, yt2.col5, yt2.col6) then yt1.col2 else null end c1,
case when yt1.col3 in (yt2.col2, yt2.col3, yt2.col4, yt2.col5, yt2.col6) then yt1.col3 else null end c2,
case when yt1.col4 in (yt2.col2, yt2.col3, yt2.col4, yt2.col5, yt2.col6) then yt1.col4 else null end c3,
case when yt1.col5 in (yt2.col2, yt2.col3, yt2.col4, yt2.col5, yt2.col6) then yt1.col5 else null end c4,
case when yt1.col6 in (yt2.col2, yt2.col3, yt2.col4, yt2.col5, yt2.col6) then yt1.col6 else null end c5
from
yourTable yt1
,yourTable yt2
where
yt1.date = '24-jan-11'
and yt2.date = '28-jan-11'
and
(
yt1.col2 in (yt2.col2, yt2.col3, yt2.col4, yt2.col5, yt2.col6)
or yt1.col3 in (yt2.col2, yt2.col3, yt2.col4, yt2.col5, yt2.col6)
or yt1.col4 in (yt2.col2, yt2.col3, yt2.col4, yt2.col5, yt2.col6)
or yt1.col5 in (yt2.col2, yt2.col3, yt2.col4, yt2.col5, yt2.col6)
or yt1.col6 in (yt2.col2, yt2.col3, yt2.col4, yt2.col5, yt2.col6)
)
having
case when c1 is null then 0 else 1 end
+ case when c2 is null then 0 else 1 end
+ case when c3 is null then 0 else 1 end
+ case when c4 is null then 0 else 1 end
+ case when c5 is null then 0 else 1 end
>= 2