[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Oct 2004
    Beiträge
    2

    SQL zur Suche von Eintrag mit größtem Wert aus Liste

    Hallo zusammen,

    da ich gerade bei einem SQL etwas auf dem Schlauch stehe und nicht weiterkomme, bin ich auf dieses Forum gestoßen. Vielleicht kann mir hier jemand einen guten Tip geben.

    Folgende Situation

    Werktag Vertragsnr Daten
    ----------------------------------
    1 12345 .......
    2 12345 .......
    1 54321 .......
    2 54321 .......
    4 54321 .......

    Problem:
    In meiner Tabelle stehen jeweils mehrere Zeilen zu der gleichen Vertragsnummer, in diesem Fall also 2 zur 12345 und 3 (nicht fortlaufend numeriert) zur 54321.

    Für die weitere Verarbeitung benötige ich in der Tabelle nur noch die Zeilen mit der höchsten Werktags-Nummer pro Vertragsnummer. Die übrigen Zeilen können gelöscht werden.

    Fällt jemandem eine einzelne SQL-Abfrage ein, mit der erreicht wird, daß in der Tabelle nur noch die - in diesem Fall 2 - hervorgehobenen Zeilen übrig bleiben.

    Da die Tabelle sehr umfrangreich sein kann, möchte ich auf eine Schleife über alle Zeilen gerne verzichten und das Ganze möglichst mit einer einzigen Abfrage erschlagen.

    Falls mir jemand einen guten Tip geben könnte, wäre ich dafür sehr dankbar.

    Gruß,
    Miranda

  2. #2
    Registriert seit
    Aug 2001
    Beiträge
    2.928

    Quick and Dirty

    Hallo Miranda,

    hier eine quick und dirty Variante.
    PHP-Code:
    DELETE FROM MyLib/MyTable                                
           WHERE digits
    (Vertragconcat digits(Werktag)      
                 
    not in (select digits(Vertragconcat       
                                digits
    (max(Werktag))         
                         
    from MyTable                        
                         Group by Vertrag

    Bitte nochmal testen!
    Es gibt bestimmt auch elegantere Möglichkeiten

    Birgitta
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 5. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

  3. #3
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Das reicht so nicht, wenn nicht in einem 3. Feld vermerkt ist, welcher Satz denn tatsächlich der letzte ist (z.B. Zähler oder Datum), da die Kombination Vertrag und Werktag ja mehrfach vorkommen kann:

    delete from myfile A
    where digits(Vertrag) concat digits(Werktag) concat digits(xxxx)
    in (select digits(Vertrag) concat digits(Werktag) concat digits(xxxx)
    from myfile b
    where a.vertrag=b.vertrag and a.werktag=b.werktag and
    a.xxxx < (select max(xxxx) from myfile c where a.vertrag=c.vertrag and a.werktag=c.werktag)
    )
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  4. #4
    Registriert seit
    Oct 2004
    Beiträge
    2
    Vielen Dank, mit den Tips habe ich es hinbekommen.

    Gruß,
    Miranda

Similar Threads

  1. Hilfe .. SQL .. DELETE
    By loeweadolf in forum NEWSboard Programmierung
    Antworten: 1
    Letzter Beitrag: 02-12-06, 19:45
  2. SQL - Cursor vernichten ?!?
    By FNeurieser in forum NEWSboard Programmierung
    Antworten: 3
    Letzter Beitrag: 11-10-06, 14:53
  3. Suche Liste Ersatzoperatoren im CL
    By kuempi von stein in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 19-07-06, 14:34
  4. SQL - Fehler
    By Kaufmann in forum IBM i Hauptforum
    Antworten: 11
    Letzter Beitrag: 28-06-06, 14:11
  5. SQL .. for update of (RPG embedded SQL)
    By loeweadolf in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 01-06-06, 09:43

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •