[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    May 2007
    Beiträge
    82

    Per SQL doppelte Sätze entfernen

    Moin, moin.

    Aus einer Datei sollen per SQL doppelte Sätze entfernt werden und zwar in Abhängigkeit eines Datums. Der Satz mit dem jüngsten Datum soll in der Datei verbleiben.

    Etwa so:

    delete from datei a
    where
    a.kunde in
    (select b.kunde from datei b
    group by b.kunde
    having count(*) > 1)
    and
    a.datum <
    (select max(c.datum) from datei c
    where c.kunde = a.kunde)

    Das Problem ist jedoch das Vorkommen von Sätzen, bei denen ein Kunde zwei Sätze mit gleichem Datum hat.

    z. B.
    0815 2009-01-23
    0815 2009-01-23
    0816 2009-02-01
    0816 2008-12-31
    0816 2007-12-31

    In diesem Fall würde zwar Kunde 0816 korrekt gelöscht, d.h., nur der Satz aus 2009 bleibt bestehen. Kunde 0815 bleibt aber mit 2 Sätze in der Datei, weil meine Abfrage < Max(Datum) lautet. Ändere ich die Abfrage auf <= Max(Datum) werden aber fälschlicherweise beide Sätze von Kunde 0815 gelöscht.

    Im Moment habe ich da ein grosses Brett vor dem Kopf und bitte um Anregungen, wie man dieses Problem lösen kann. Das Ganze müsste dann auch noch (bitte nicht lachen) unter V4R3 laufen.

    Danke und Gruss
    Ulli

  2. #2
    Registriert seit
    Aug 2001
    Beiträge
    2.928
    In Ermangelung eines anderen Kriteriums kannst Du nur noch die relative Satz-Nr. prüfen und nur den Satz mit der höchsten relativen Satz-Nr. stehen lassen:

    Etwa so:
    PHP-Code:
    delete from Datei a                                               
    where a
    .kunde in (select b.kunde from Datei b                     
                         group by b
    .kunde                               
                         having count
    (*) > 1)                           
      and 
    rrn(a) < (select Max(RRN (c)) from Datei c                  
                        where    c
    .kunde a.kunde                      
                             
    and c.Datum = (Select Max(Datum)           
                                               
    from Datei d           
                                               where c
    .Kunde d.Kunde)) 
    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
    May 2007
    Beiträge
    82
    Danke Birgitta !!!

    Mit der RRN kann ich 'was anfangen.

    Gruss
    Ulli

  4. #4
    Registriert seit
    Feb 2001
    Beiträge
    20.695
    Denke aber daran, wenn du REUSEDLT(*YES) hast, dass die RRN nicht den aktuellsten Satz bezeichnen muss.
    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

Similar Threads

  1. per SQL Feld ändern...
    By svente in forum NEWSboard Programmierung
    Antworten: 4
    Letzter Beitrag: 23-01-07, 09:49
  2. update per sql
    By steven_r in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 25-09-06, 08:22
  3. Kopieren per SQL
    By steven_r in forum NEWSboard Programmierung
    Antworten: 4
    Letzter Beitrag: 18-07-06, 09:36
  4. Teildateien per SQL auflisten
    By Nennewitz in forum NEWSboard Programmierung
    Antworten: 16
    Letzter Beitrag: 28-06-06, 13:49
  5. doppelte Sätze löschen mit SQL
    By hs in forum IBM i Hauptforum
    Antworten: 7
    Letzter Beitrag: 22-11-04, 10:30

Berechtigungen

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