2016-05-13 5 views
1

Da ich Oracle SQL neu bin, brauche ich Hilfe. Ich möchte eine neue Mitarbeitertabelle in meiner Datenbank erstellen - Daten aus meiner Rohtabelle abrufen und die neuen Daten auf 'Datum' aufbauen.Oracle DB - neue Mitarbeiter Tabelle mit den neuesten Daten basierend auf dem Datum erstellen

BEISPIEL: Einer meiner Mitarbeiter hat den Nachnamen geändert und ich möchte meine Tabelle mit seiner neuesten Dateneingabe erstellen.

table1_raw mit Spalten pnbr; Vorname; lname; Datum

197001014688 ;Eva ;Andersson ;20150501 
197001014688 ;Eva ;Sandsten ;20160501 
198401011133 ;Peter ;Larsson ;20150102 
198401011133 ;Peter ;Larsson ;20160102 
194408011237 ;Sven ;Hansson ;20130203 

table2 mit Spalten pnbr; Vorname; lname;Datum

197001014688 ;Eva ;Sandsten ;20160501 
198401011133 ;Peter ;Larsson ;20160102 
194408011237 ;Sven ;Hansson ;20130203 

In SQL Server ich die folgende Abfrage verwendet haben, mit Common Table Expressions:

;WITH CTE as 
(SELECT RN = ROW_NUMBER() OVER (PARTITION BY pnbr ORDER BY date DESC), 
    pnbr, 
    fname, 
    lname 
FROM table1_raw) 
SELECT 
    fname, 
    lname, 
    pnbr 
INTO 
    table2 
FROM 
    CTE 
WHERE 
    RN = 1 

Wie schreibe ich diese Abfrage in Oracle SQL? Gibt es einen effizienteren/einfacheren Weg, dies zu tun?

Antwort

0

In Oracle Ihre Abfrage wird wie folgt aussehen -

insert into table2 
select t.pnbr, t.fname, t.lname, t.date 
from table1 t 
inner join (
    select pnbr, max(date) as MaxDate 
    from table1 tm 
    group by username 
) tm on t.username = tm.username 
and t.date = tm.MaxDate 
0

eine Tabelle auf einen Sie verwenden create table as in Oracle benötigt SELECT Basis zu erstellen (und Standard-SQL)

rn = ... Mit einer Spalte definieren Alias ​​ist ungültig (Standard) SQL auch, müssen Sie ... AS rn

verwenden Und schließlich geht das ; zum Ende der Aussage, nicht vor der with Schlüsselwort:

create table table2 
as 
WITH CTE as (
    SELECT ROW_NUMBER() OVER (PARTITION BY pnbr ORDER BY date DESC) as rn, 
     pnbr, 
     fname, 
     lname 
    FROM table1_raw 
) 
SELECT fname, 
     lname, 
     pnbr 
FROM cte 
WHERE rn = 1; 
Verwandte Themen