[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Sep 2005
    Beiträge
    385

    anzahl Sätze ermitteln

    Moin zusammen,

    eine Datei hat diesen key

    K1 7S 0
    K2 2S 0
    K3 2S 0

    1234567 00 00
    2345678 00 00
    2345678 01 00
    2345678 02 00
    3456789 00 00
    3456790 00 00
    3456790 01 00
    ....

    Die Felder sind nicht durchgängig gefüllt

    Wenn ich jetzt 10.000 Sätze haben will habe ich das versucht:

    Select min(k1), max(k1), count(*) from Datei group by k1 having count(*) = 10.000

    Das geht aber nicht
    Wie ermittel ich den ersten k1 und letzen k1 der ersten 10.000 Sätze?


    Danke
    der ILEMax

  2. #2
    Registriert seit
    Aug 2001
    Beiträge
    2.869
    So ganz habe ich nicht verstanden was Du brauchst.
    Deshalb fasse ich zunächst einmal zusammen wie ich Deine Anforderung verstehe:
    1. Du möchtest von einer Tabelle, die ersten 10.000 Sätze sortiert nach K1, K2, K3
    2. Von diesen 10.000 Sätzen benötigst Du nur den kleinsten und größten K1 Schlüssel-Wert.

    Wenn das die Anforderung ist, dann könntest Du die Daten wie folgt ermitteln:
    Code:
    With x as (Select K1
                 from YourTable
                 Order By K1, K2, K3
                 Limit 10000)
    Select Min(K1), Max(K1) 
      from x;
    Birgitta Hauser

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

  3. #3
    Registriert seit
    Sep 2005
    Beiträge
    385
    Super, vielen Dank!

    Limit .... den kannte ich nicht ....

  4. #4
    Registriert seit
    Aug 2001
    Beiträge
    2.869
    Limit (und Offset) gibt es seit 7.1 (TR)
    Fetch First X Rows only, das die ersten x Zeilen zurückgibt, gibt es allerdings schon seit ca. V5R1M0.
    Birgitta Hauser

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

  5. #5
    Registriert seit
    Feb 2001
    Beiträge
    20.207
    Das Problem ist halt nur, dass Order By in Subqueries i.d.R. ignoriert werden.
    Da gilt dann meist die Sortierung nach Satznummer.
    M.a.W., der Limit funktioniert, der Order-By aber nicht.
    Limit ist auch nur eine andere Schreibweise (näher am SQL-Standard) als "fetch first n rows only".

    Dein SQL wird nämlich umgebaut in

    Select Min(K1), Max(K1)
    from (
    Select K1 from YourTable
    Limit 10000
    )

    With-Konstrukte erleichtern uns nur das Lesen von SQL's wowie die Wiederverwindung in mehreren Joins. Dies heißt ebenso, dass eine Mehrfachverwendung einer With-Table auch mehrfach gelesen wird.

    Nachdem ich nun mal an eine V7-Mschine gekommen bin, konnte ich prüfen, dass im Gegensatz zu früher ein "Order By" nun doch angewendet wird.
    Wann immer das nun mal dazugekommen ist.

    Beim Lateral Table geht das schon länger, bei Subqueries nun wohl auch.
    Aber dies ist eher nicht Standard-SQL, denn der Microsoft SQL-Server lehnt dies ab.

    Die Alternative wäre ansonsten noch

    Select Min(K1), Max(K1)
    from (
    Select K1, row_number() over(order by K1) as rowno
    from YourTable
    )
    where rowno <= 10000
    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

  6. #6
    Registriert seit
    Aug 2001
    Beiträge
    2.869
    M.a.W., der Limit funktioniert, der Order-By aber nicht.
    Natürlich funktionniert der LIMIT in Verbindung mit einem ORDER BY.
    In diesem Fall wird nämlich zunächst das volle Query ausgeführt und dann die gewünschte Anzahl an Datensätzen zurückgegeben.
    Birgitta Hauser

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

  7. #7
    Registriert seit
    Feb 2001
    Beiträge
    20.207
    In der Vergangenheit habe ich viele Subqueries mit Order by probiert, die alle nicht funktionierten.
    Dass dies nun ab V7Rx TRy klappt kann ich auch nicht immer probieren.
    Gestern war ich mal wieder auf einer Kundenmaschine mit V7R3 wo das dann funktionierte.
    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. OPNQRYF Anzahl Datensätze ermitteln
    By timeless in forum NEWSboard Programmierung
    Antworten: 4
    Letzter Beitrag: 04-05-10, 13:33
  2. Anzahl Sätze (Count) aus 2 Dateien via SQL
    By Jenne in forum IBM i Hauptforum
    Antworten: 4
    Letzter Beitrag: 26-09-08, 16:22
  3. Anzahl Sätze bei CPYFRMSTMF
    By Liebhoff in forum IBM i Hauptforum
    Antworten: 11
    Letzter Beitrag: 30-11-07, 13:16
  4. Anzahl Dateien in IFS-Verzeichnis ermitteln
    By COS in forum IBM i Hauptforum
    Antworten: 8
    Letzter Beitrag: 22-11-07, 14:06
  5. Anzahl gelöschter Sätze
    By f.g. in forum IBM i Hauptforum
    Antworten: 6
    Letzter Beitrag: 15-08-05, 14:25

Berechtigungen

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