sql >> Databasteknik >  >> RDS >> Oracle

Hur får man det senaste personalrekordet i Oracle?

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

Ovan får du en post med maximalt effektiv__datum för varje distinkt emp_id.

Ditt andra krav på att returnera post för ett visst datum bör uppfyllas av denna fråga:

("status ASC" - tar hand om att ta "Joiner"-status om det också finns "Leaver" för samma datum.)

 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;


  1. Manipulera rader med flera satser i mysql

  2. Ett enkelt inloggning/auktoriseringssystem med Dancer och Postgres

  3. Hur tar man bort alla referensrader automatiskt om överordnad rad tas bort i mysql?

  4. SQL Group BY använder strängar i nya kolumner