od
od copied to clipboard
(nejen) SQL cvičení: rodinné vztahy poslanců v rámci obchodního rejstříku
Tohle je jen hrubý nástřel, je třeba zohlednit tři možnosti:
- Stejná adresa ve stejné firmě, různá jména (nenula false positives)
- To samé jako 1., ale s detekcí podobného příjmení (dost nedokonalé a hodně false negatives)
- Stejná adresa, podobné příjmení, různé firmy
Tady je první nástřel, udělaný na první dobrou - největší neduh je asi to, že nevyřazuju SVJ, který tam budou asi hlavní kámen úrazu.
with poslanci as (
select * from psp.poslanci_osoby os
inner join psp.poslanci_zarazeni zar using(id_osoba)
inner join psp.poslanci_organy org on org.id_organ = zar.id_of
where zar.cl_funkce = 0
and zkratka = 'PSP9'
), relica as (
select ico
from justice.angazovane_osoby ang
inner join poslanci pos on lower(pos.jmeno) = lower(ang.jmeno) and lower(pos.prijmeni) = lower(ang.prijmeni) and pos.narozeni = ang.datum_narozeni
), duplicity as (
select ico, adresa_stat, adresa_ulice, adresa_okres, adresa_cislo_po, adresa_psc from justice.angazovane_osoby
where ico in (select * from relica)
group by ico, adresa_stat, adresa_ulice, adresa_okres, adresa_cislo_po, adresa_psc
having count(*) > 1 and count(distinct (lower(jmeno), lower(prijmeni))) > 1
)
select ico, jmeno, prijmeni, * from justice.angazovane_osoby
inner join duplicity using(ico, adresa_stat, adresa_ulice, adresa_okres, adresa_cislo_po, adresa_psc)
order by ico, jmeno, prijmeni