RE: sql help

RE: sql help

 

  

Here is the SQL
---------------

SELECT empid, jdate, job
FROM (
SELECT empid,
jdate,
job,
ROW_NUMBER()
OVER (PARTITION BY empid ORDER BY jdate DESC)
AS rnk
FROM (
SELECT empid,
jdate,
job,
LAG(job,1,job)
OVER(PARTITION BY empid ORDER BY jdate )
AS prev_job,
LAG(jdate,1,jdate)
OVER(PARTITION BY empid ORDER BY jdate )
AS prev_jdate
FROM TEST_EMP
)
WHERE job <> prev_job
)
WHERE rnk = 1
;


Here is the script to setup the test data
-----------------------------------------

-- DROP TABLE TEST_EMP;

CREATE TABLE TEST_EMP
(
empid NUMBER,
jdate DATE,
job NUMBER
);

INSERT INTO TEST_EMP VALUES (355,TO_DATE('8/9/2003',
'MM/DD/YYYY'),450);
INSERT INTO TEST_EMP VALUES (355,TO_DATE('9/18/2004',
'MM/DD/YYYY'),440);
INSERT INTO TEST_EMP VALUES (355,TO_DATE('2/7/2005',
'MM/DD/YYYY'),450);
INSERT INTO TEST_EMP VALUES (355,TO_DATE('8/18/2006',
'MM/DD/YYYY'),440);
INSERT INTO TEST_EMP VALUES
(355,TO_DATE('11/25/2006','MM/DD/YYYY'),440);

COMMIT;

-----Original Message-----
From: Jeff Chirco
[mailto:oracledba-ezmlmshield-x13527297.[Email address protected]
Sent: Wednesday, May 16, 2007 7:30 PM
To: LazyDBA Discussion
Subject: sql help

Here is my dilemma. I have the table like below



EMPID DATE JOB

355 8/9/2003 450

355 9/18/2004 440

355 2/7/2005 450

355 8/18/2006 440

355 11/25/2006 440



What I need to get is somebody's last promotion date. So if I want to
see when this person was last promoted to job 440 I want to see
8/18/2006, not 11/25/2006 or 9/19/2004. Or if I want to see when this
person was last promoted to job 450 I would expect to see 2/7/2005. I
can't figure out how to query this data.

Thanks for any help.





Jeff





---------------------------------------------------------------------
TO REPLY TO EVERYBODY , PLEASE CLICK REPLY-ALL, NOT JUST REPLY
To post a dba job: http://jobs.lazydba.com
To Subscribe : http://www.LazyDBA.com
To unsubscribe: http://www.lazydba.com/unsubscribe.html



Oracle LazyDBA home page