a trigger, that checks for one or more existing rows (checking for tbl.lastname, tbl.postal_code, tbl.birthday and (tbl.tel OR tbl.tel2)). If this is the case, it should take the MAX(print_date) - if not older than 1 year - from the (yet) existing rows, delete them then ...