2017-05-04 7 views
1

Ich muss den Positionsnamen aller Empids vergleichen, wenn eine neue Positionsänderung als neue Positionsänderung basierend auf zwei letzten Datensätzen angezeigt werden soll, verwende ich Lag analytic function aber nicht bekommen korrekte Ergebnisse, ich bin Anfänger in sQL weiß nicht, ob andere Funktionen, die ich bessere Ergebnisse könnte mir einer auf dieserSo vergleichen Sie die Position der Mitarbeiter in Oracle sql

helfen bekommen

enter image description here

Position Tabelle:

empid postionname empseq Date 
12  ENGINEER  1  4-Apr-14 
12  MANAGER  2  4-Apr-16 
12  DIRECTOR  3  4-Apr-17 
13  TESTER  4  4-Apr-16 
13  MANAGER  5  4-Apr-17 

OUT PUT

EMPID oldpostionname NEW POSITION 
12  MANAGER  DIRECTOR 
13  TESTER  MANAGER 
+1

scheint alles logisch in Ordnung und das Ergebnis zu sein. Emp 12 war früher Manager, jetzt ist er Direktor. Das gleiche gilt für emp 13 –

Antwort

1

Versuchen als

SELECT empid, 
     MIN (postionname) KEEP (DENSE_RANK FIRST ORDER BY datecol) 
      oldpostionname, 
     MAX (postionname) KEEP (DENSE_RANK FIRST ORDER BY datecol DESC) 
      newpostionname 
    FROM (SELECT DISTINCT empid, 
          postionname, 
          datecol, 
          RANK() OVER (ORDER BY datecol) emprank 
      FROM position_table) 
    WHERE emprank >= 2 
GROUP BY empid 

Ergebnisse

+-------+----------------+----------------+ 
| EMPID | OLDPOSTIONNAME | NEWPOSTIONNAME | 
+-------+----------------+----------------+ 
| 12 | MANAGER  | DIRECTOR  | 
| 13 | TESTER   | MANAGER  | 
+-------+----------------+----------------+ 

Demo

+0

Danke, wie erwartet funktioniert. – Mahesh

+0

@Mahesh Bitte akzeptieren Sie die Antwort. – user75ponic

Verwandte Themen