Eine Tabelle Jede Zeile vergleichen

TutorialKing

Mitglied
Hallo zusammen,

ich habe eine knackige Aufgabe bekommen und weiß leider nicht ob das überhaupt mit reinem SQL zu lösen ist.

Ich habe eine Tabelle mit x Spalten, davon sind 3 relevant. Nennen wir sie :
bezeichnung (Nummer)
groesse (Nummer)
Datum

Alle Felder liegen leider in varchar2 vor :-(
Beispieldatensätze:
Muss angezeigt werden...
bezeichnung groesse Datum
XDC566 12000 09.10.2007
XDC566 12000 09.10.2007
XDC566 12000 09.10.2007
XDC566 15000 09.12.2007
XDC566 15000 09.12.2007
XDC566 10000 09.05.2008
Datensätz ok nicht anzeigen...
XP2P11 45000 01.01.2008
XP2P11 45000 01.01.2008
XP2P11 45000 01.01.2008
XP2P11 45000 01.01.2008
XP2P11 46000 09.02.2008
XP2P11 50000 10.05.2008

Erklärung :
Zu der Bezeichnung gibt es eine Größe und ein Datum, wenn diese identisch sind ist alles ok. Wenn die Größe 12000 am 09.10.2007 beträgt dann muss der nachfolgende Datensatz entweder identisch sein oder Größe und Datum ändern. Also in unserem Falle Größe:15000 und Datum 09.12.2007. Es darf aber nicht sein das am 09.05.2008 die Größe auf 10000 fällt.Falls dies der Fall ist bitte alle Datensätze zu XDC566 anzeigen order by datum.
 
Ich habs mir schon zwei, drei mal hier angeguckt aber dein Beispiel und die Aufgabenstellung verstehe ich nicht. Vielleicht gehts da anderen auch so.

Warum darf sich die Menge vom 09.12.07 zum 09.05.08 nicht ändern aber vom 09.10.07 zum 09.12.07 schon?

Eine strukturierte Erklärung wäre gut.
 
Ich versuche es nochmal einfach zu erklären :

Die "Groesse" muss sich mit der Zeit "Datum" erhöhen oder zumindest gleich bleiben. Sie darf aber nicht kleiner werden.
Die Zeit verändert sich ja nur in eine Richtung 2008,2009,2010 etc. die Groesse muss hier mit wachsen bzw. gleich bleiben.

Falls am 01.01.2007 die Groesse "1000" beträgt dann müssen bei weiteren Datensätze die Groesse auf "1000" bleiben oder sich erhöhen. Falls nun irgendwann in der Zukunft die "Groesse" kleiner wird sollen diese Datensätze angezeigt werden.
 
Wenn ichs richtig verstanden habe:

SELECT * FROM tabelle WHERE bezeichnung IN (SELECT bezeichnung from tabelle t, tabelle t2 WHERE t.bezeichung=t2.bezeichnung AND t.groesse>t2.groesse AND t.datum<t2.datum)
ORDER BY bezeichnung, datum ASC;

Hab leider keine Oracle zum testen, daher weiß ich nicht ob sie das frisst. Aber Grundidee sollte klar werden.
 
Zuletzt bearbeitet:
@Cojote
Ich habe den Befehl nun von dir übernommen, leider bekomme ich folgende Fehlermeldung : ORA-00918 column ambiguously defined. Ich vermute das man von der gleichen Tabelle nicht 2 unterschiedliche Aliases nehmen kann.


@ZodiacXP
Leider nutze ich kein Mysql sondern Oracle und kann somit keine Mysql Funktionen nutzen.
Auch kann ich keine Dateien hier anhängen sonst hätte ich dir einen kleinen Export zeigen können
 

Neue Beiträge

Zurück