Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Wie bekomme ich den neuesten Mitarbeiterdatensatz in Oracle?

SELECT * FROM 
( SELECT  
    e.*,
    ROW_NUMBER() OVER (partition by emp_id order by effective_date DESC) r
FROM  
    EMPLOYEE  e)
WHERE r = 1;

Oben erhalten Sie einen Datensatz mit maximalem Wirksamkeitsdatum für jede einzelne emp_id.

Ihre zweite Anforderung, einen Datensatz für ein bestimmtes Datum zurückzugeben, sollte durch diese Abfrage erfüllt werden:

("Status ASC" - übernimmt den "Joiner"-Status, wenn es für dasselbe Datum auch "Leaver" gibt.)

 SELECT * FROM 
( SELECT  
    e.*,
    ROW_NUMBER() OVER (partition by emp_id order by effective_date DESC, status ASC) r
FROM  
    EMPLOYEE  e
WHERE effective_date <= '<your desired date>')
WHERE r=1;