ここでピボットが役立つと思います。
以下の3つの値が重複している場合、つまりオリジナルと呼ばれるものがある場合は、最も古いpost_idを見つけることができます。
select min(post_id)
from (
select post_id,
max(case when meta_key = '_field_5' then meta_value end) as first_name,
max(case when meta_key = '_field_6' then meta_value end) as last_name,
max(case when meta_key = '_field_7' then meta_value end) as email
from your_table
where meta_key in ('_field_5', '_field_6', '_field_7')
group by post_id
) t
group by first_name, last_name, email
having count(*) > 1;
このグループをグループから除外して、重複を取得することができます。
select post_id,
max(case when meta_key = '_field_5' then meta_value end) as first_name,
max(case when meta_key = '_field_6' then meta_value end) as last_name,
max(case when meta_key = '_field_7' then meta_value end) as email
from your_table
where meta_key in ('_field_5', '_field_6', '_field_7')
group by post_id
having post_id != (
select min(post_id)
from (
select post_id,
max(case when meta_key = '_field_5' then meta_value end) as first_name,
max(case when meta_key = '_field_6' then meta_value end) as last_name,
max(case when meta_key = '_field_7' then meta_value end) as email
from your_table
where meta_key in ('_field_5', '_field_6', '_field_7')
group by post_id
) t
group by first_name, last_name, email
having count(*) > 1
);