you will need to write a stored procedure or a view to the database to do what you want. Just doing a join to the tables won't work...
Well now that I think about it, you could probably accomplish this by setting up a filter in the Report/Selection Formulas/Records.
I would probably build a delimited string of the records that have gone before, and omit the record if it has already been read. Something like:
local stringvar good := "";
local stringvar current;
current := "|" + totext({table.date}) + "^" + totext({table.family}) + "$" + {table.program} + "|";
if instr(good, current) > 0 then
false;
else(
good := good + current;
true;
);
something like this should work as it only allows in one copy of the record, which is fine as long as the rest of the data is same.
HTH