Ich habe diese TabellenWie durch Daten Überlappung Datensatz abzurufen
employee(id, name)
employeekey(id, employeeid, keyid, startdate, enddate)
key(id, code)
I Aufzeichnungen haben, die
id employeeid keyid startdate enddate
1 emp1 k001 01/01/2016 NULL
2 emp1 k002 02/06/2016 03/07/2016
3 emp2 k003 01/06/2016 30/06/2016
4 emp2 k003 01/07/2016 15/07/2016
5 emp3 k004 01/05/2016 15/05/2016
6 emp3 k005 10/05/2016 15/05/2016
Die von Terminen in employeekey überlappen emp1 und emp3 Überlappung in Datumsangaben von Schlüsselzuweisungen Ich möchte, dass eine Abfrage diese zurückgibt. Das war mein Fortschritt, aber ich bekomme alle Angestellten, die 2 oder mehr Schlüssel haben, auch wenn sie sich in Daten nicht wie in den obigen Ergebnissen überschneiden. Ich möchte nur diejenigen, die sich wie unten gezeigt überschneiden.
id employeeid keyid startdate enddate
1 emp1 k001 01/01/2016 NULL
2 emp1 k002 02/06/2016 03/07/2016
5 emp3 k004 01/05/2016 15/05/2016
6 emp3 k005 10/05/2016 15/05/2016
Fortschritt
select e.id as employeeid, e.name, k.id as keyid, ek.startdate, ek.enddate
from employee e
inner join employeekey ek on ek.employeeid = e.id
inner join key k on k.id = ek.keyid
where exists
(
select count(1), e2.id, e2.name
from employee e2
inner join employeekey2 ek2 on ek2.employeeid = e2.id
where e.id = e2.id
group by e2.id, e2.name
having count(e2.id) > 1
)
order by 1
Reiniger als meine Vereinigung. – xQbert