Kleinstes Datum herausfinden

Communicate

Mitglied
Oracle
Hallo zsuammen,

ich verzweifle gerade an folgendem problem:

Ich habe eine historisierungstabelle. In dieser gibt es eine spalte "history.col_value_new".
Jedesmal, wenn die zugehörige original Spalte verändert wird, wird auch die history.col_value_new automatisch verändert.

Nun geht es mir darum, den aktuellesten Wert herauszufinden.
Ich dachte mir das eigentlich ganz einfach mit min(history.col_value_new) soltle das zu machen sein, ist es aber nicht, weil ich immer alle werte von history.col_value_new erhalten. Hier mal mein ganzer Code:

Code:
SELECT history.table_name,   
         history.col_name,   
history.col_value_new, 
         kunden.kunden_id,   
         kunden_ext.kunden_id  
    FROM history,   
         kunden,   
         kunden_ext  
   WHERE ( kunden.kunden_id = kunden_ext.kunden_id ) and  
         ( ( history.table_name = 'KUNDEN_EXT' ) AND  
         ( history.pk_value = '(' || kunden.KUNDEN_ID || ')' ) ) AND  
         history.col_name = 'LETZTE_BEWEGUNG' AND  
         to_date(sysdate)- to_date(history.col_value_new) > 120    
Group by history.table_name,   
         history.col_name,   
         history.col_value_new,
         kunden.kunden_id,   
         kunden_ext.kunden_id
HAVING to_date(history.col_value_new) =min(to_date((history.col_value_new)));

Kann mir einer von Euch helfen, was ich falsch mache?

Grüße
Communicate
 
Zuletzt bearbeitet:
das bringt leider nur ein ora-00933: SQL BEfehl wurde nicht korrekt beendet.

Nochmal zru verdeutlichung:

Es gibt eine Tabelle Kunden. In dieser gibt es die Spalte "LETZTE_BEWEGUNG".
In der Spalte steht z.B. "01.01.2000". Nun wird das Datum verändert und LETZE_BEWEGUNG ist nun 10.10.2009. gleichzeitig wird in der historisierungstabelle die spalte history.col_name mit "Letzte_BEWEGUNG" gefüllt und der neue Wert in history.col_value_new geschrieben. Der alte Wert von history.col_value_new ist also 01.01.2000 und der neue 10.10.2009. Ich möchte nur den Datensatz als Ausgabe, wo 10.10.2009 steht.

Ich hoffe ich habe mich ejtzt etwas besser ausgedrückt....
 
Okay, einen Schritt nach vorn, drei zurück....

Ich denke, ich werde um subquerys nicht herumkommen (in oracle gibts kein limit)...

Aber von Subquerys habe ich so überhaupt keien Ahnung, kann mir noch jemand helfen?
 
Okay, einen Schritt nach vorn, drei zurück....

Ich denke, ich werde um subquerys nicht herumkommen (in oracle gibts kein limit)...

Aber von Subquerys habe ich so überhaupt keien Ahnung, kann mir noch jemand helfen?

hallo,

etwa so :

Code:
....
....

WHERE myDatumsFeld = (select max(myDatumsFeld) from mytable);
....

Gruss
 
Zuletzt bearbeitet:
Okay, okay, nächstes mal schreib ichs deutlich oben drüber :)

Ich hab das ganze gerade mal ausprobiert. leider funktioniert es nicht. Ich weiss schon warum ich diese subqueries hasse :-(

Mein Code sieht jetzt folgender maßen aus und bricht in der letzten Zeile mit ora00936 - Ausdruck fehlt ab:

Code:
SELECT history.table_name,   
         history.col_name,   
history.col_value_new, 
         kunden.kunden_id,   
         kunden_ext.kunden_id  
    FROM history,   
         kunden,   
         kunden_ext  
   WHERE ( kunden.kunden_id = kunden_ext.kunden_id ) and  
         ( ( history.table_name = 'KUNDEN_EXT' ) AND  
         ( history.pk_value = '(' || kunden.KUNDEN_ID || ')' ) ) AND  
         history.col_name = 'LETZTE_BEWEGUNG' AND  
         to_date(sysdate)- to_date(history.col_value_new) > 120 And 
history.col_value_new = select max(history.col_value_new) from history;
 
Okay, okay, nächstes mal schreib ichs deutlich oben drüber :)

Ich hab das ganze gerade mal ausprobiert. leider funktioniert es nicht. Ich weiss schon warum ich diese subqueries hasse :-(

Mein Code sieht jetzt folgender maßen aus und bricht in der letzten Zeile mit ora00936 - Ausdruck fehlt ab:

Code:
SELECT history.table_name,   
         history.col_name,   
history.col_value_new, 
         kunden.kunden_id,   
         kunden_ext.kunden_id  
    FROM history,   
         kunden,   
         kunden_ext  
   WHERE ( kunden.kunden_id = kunden_ext.kunden_id ) and  
         ( ( history.table_name = 'KUNDEN_EXT' ) AND  
         ( history.pk_value = '(' || kunden.KUNDEN_ID || ')' ) ) AND  
         history.col_name = 'LETZTE_BEWEGUNG' AND  
         to_date(sysdate)- to_date(history.col_value_new) > 120 And 
history.col_value_new = select max(history.col_value_new) from history;

Hallo,


Die Klammern sind aber wichtig und nicht freiwillig :)...deswegen ora00936 - Ausdruck fehlt ...

Code:
history.col_value_new = (select max(history.col_value_new) from history);


Gruss
 
na da muss man erstmal drauf kommen ;-)

So, jetzt gibts zwar keinen Fehler mehr, aber auch keine Werte. Sprich mein Ergebnis ist immer blank :-(

Woran könnte das denn jtzt noch liegen :confused:
 

Neue Beiträge

Zurück