[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Oct 2007
    Beiträge
    30

    SQL-Abfrage: Maximum einer Gruppe

    Hallo zusammen,

    in bestimmten Zeitabständen ermittle ich die Anzahl angemeldeter User (bzw. die Anzahl aktiver Sitzungen):
    WRKUSRJOB USER(*ALL) STATUS(*ACTIVE) OUTPUT(*PRINT) + JOBTYPE(*INTERACT) ASTLVL(*INTERMED)
    Anschließend wird das Spoolfile über ein Programm in eine Datei geschrieben, die folgende Felder enthält: Datum, Uhrzeit, Username, Jobname, Jobnummer usw.

    20131024 120000 USER1
    20131024 120000 USER1
    20131024 120000 USER1
    20131024 120000 USER2
    20131024 120000 USER3

    20131024 120500 USER1
    20131024 120500 USER1
    20131024 120500 USER2
    20131024 120500 USER3
    20131024 120500 USER4

    20131024 120500 USER2
    20131024 120500 USER2
    20131024 120500 USER4

    Ziel ist eine Auswertung, bei der die maximale Anzahl an aktiven Usern pro Tag ausgegeben wird (pro Messung wird ein User nur einmal gezählt, egal wie viele aktive Jobs er hat).

    Bezogen auf obige Daten:
    20131024 4 (da um 12:05 Uhr die meisten User aktiv waren)
    20131025 x
    20131026 y
    usw.

    Wie kann man das mit einem SQL-Statement am elegantesten lösen?
    vielen Dank für eure Hilfe.

  2. #2
    Registriert seit
    Aug 2003
    Beiträge
    1.508
    Hallo,

    Ich würde das ganze in mehre Subselects unterteilen.
    So in etwa wie ...

    Code:
    select datum, max(anzahl) from (          
       select datum, time, count(*) anzahl from (
          select distinct datum, time, user) t1     
       group by datum, time ) t2
    (Ungetestet)

    lg Andreas

  3. #3
    Registriert seit
    Aug 2001
    Beiträge
    2.875
    Ich finde, dass CTEs (Common Table Expressions) leichter zu lesen sind, da sie vor dem eigentlichen SELECT-Statement angegeben werden und nicht ineinander verschachtelt sind (bzw. sein sollten):

    Code:
    With x as (Select Datum, Zeit, Count(Distinct Benutzer) Anzahl
                  From YourTable
                  Group By Datum, Zeit)
    Select Datum, Max(Anzahl)
    From x
    Group By Datum;
    Birgitta
    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

  4. #4
    Registriert seit
    Oct 2007
    Beiträge
    30
    vielen Dank für die schnellen Antworten. Der Vorschlag von Birgitta ist genau das, was ich gesucht habe.

Similar Threads

  1. SQL Abfrage - Bezug Artikelgruppe Lieferanten
    By snibbe in forum NEWSboard Programmierung
    Antworten: 7
    Letzter Beitrag: 27-05-12, 18:57
  2. Einfache Abfrage in COBOL/400 mit EXEC SQL
    By AS400-Anfänger in forum NEWSboard Programmierung
    Antworten: 6
    Letzter Beitrag: 27-06-06, 13:18
  3. Abfrage nach <> Ziffern in SQL
    By behmer in forum IBM i Hauptforum
    Antworten: 1
    Letzter Beitrag: 29-05-06, 12:52
  4. sql abfrage
    By steven_r in forum NEWSboard Programmierung
    Antworten: 3
    Letzter Beitrag: 17-05-06, 15:49
  5. Problem bei Abfrage bei Imbedded SQL
    By cbe in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 08-06-05, 16:21

Berechtigungen

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