Ankündigung

Einklappen
Keine Ankündigung bisher.

[mySQL] - Höchster Datums-Werte in einer Kalenderwoche ausgeben

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [mySQL] - Höchster Datums-Werte in einer Kalenderwoche ausgeben

    Hallo,

    ich habe ein Problem mit einem SQL-Statement:

    Ich habe eine Tabelle mit folgenden Spalten: ID; Personal-Nr.; Wert; Kalenderwoche; Datum

    Nun möchte ich das zur Personal-Nr. 1000 die Werte des höchsten Datums Wert zu jeder Kalenderwoche ausgeben wir...

    Beispiel


    ID; Personal-Nr.,; Wert; Kalenderwoche; Datum

    1; 1000; 23,32; 18; 2020-04-05
    2; 1000; 23,32; 18; 2020-04-06
    3; 1000; 23,32; 18; 2020-04-07
    4; 1000; 23,32; 18; 2020-04-08
    5; 1000; 23,32; 18; 2020-04-09
    6; 1000; 23,32; 18; 2020-04-10
    7; 1000; 23,32; 19; 2020-04-11
    8; 1000; 23,32; 19; 2020-04-12
    9; 1000; 23,32; 19; 2020-04-13
    10; 1000; 23,32; 19; 2020-04-14
    11; 1000; 23,32; 19; 2020-04-15
    12; 1000; 23,32; 19; 2020-04-16


    Das Ergebnis sollte nun sein:

    KW; Personal-Nr.: Datum; Wert
    18; 1000; 2020-04-10; 23,32
    19; 1000; 2020-04-16; 23,32



    PHP-Code:
    SELECT kalenderwoche,personalnr,datum,wert

    FROM tableData WHERE personalnr 
    1000

    GROUP BY kalenderwoche

    Bekomme aber nicht das richtige Ergebnis ausgegeben (Datum ist nicht das höchste innerhalb einer Kalenderwoche)


  • akretschmer
    antwortet
    mal als Schnellschuß:

    Code:
    test=*# select * from rayn ;
     id |  p   | wert  | kw |   datum    
    ----+------+-------+----+------------
      1 | 1000 | 23.32 | 18 | 2020-04-05
      2 | 1000 | 23.32 | 18 | 2020-04-06
      3 | 1000 | 23.32 | 18 | 2020-04-07
      4 | 1000 | 23.32 | 18 | 2020-04-08
      5 | 1000 | 23.32 | 18 | 2020-04-09
      6 | 1000 | 23.32 | 18 | 2020-04-10
      7 | 1000 | 23.32 | 19 | 2020-04-11
      8 | 1000 | 23.32 | 19 | 2020-04-12
      9 | 1000 | 23.32 | 19 | 2020-04-13
     10 | 1000 | 23.32 | 19 | 2020-04-14
     11 | 1000 | 23.32 | 19 | 2020-04-15
     12 | 1000 | 23.32 | 19 | 2020-04-16
    (12 rows)
    
    test=*# with x as (select kw, max(datum) from rayn group by kw) select * from rayn where (kw, datum) in (select * from x);
     id |  p   | wert  | kw |   datum    
    ----+------+-------+----+------------
      6 | 1000 | 23.32 | 18 | 2020-04-10
     12 | 1000 | 23.32 | 19 | 2020-04-16
    (2 rows)
    
    test=*#

    Einen Kommentar schreiben:


  • RaynAnderson
    antwortet
    Hallo,

    ich komme nicht auf die Lösung, könntest mir vielleicht das SQL-Statement formulieren?

    Einen Kommentar schreiben:


  • akretschmer
    antwortet
    so ist es. entweder also z.B. noch ein Subselect verwenden, oder Window-Funktionen, oder PostgreSQL mit DISTINCT ON( ...). Viele Wege führen zum Ziel.

    Einen Kommentar schreiben:


  • hellbringer
    antwortet
    wert gehört auch ins GROUP BY, sonst ist die Abfrage fehlerhalft. Jede andere Datenbank würde hier eine Fehlermeldung werfen.

    Einen Kommentar schreiben:


  • RaynAnderson
    antwortet
    Hallo akretschmer,

    vielen Dank für die schnelle Antwort. Ich habe es gleich probiert )

    PHP-Code:

    SELECT max
    (datum) as datumkalenderwochewert

    FROM tableData WHERE personalnr 
    1000

    GROUP BY kalenderwoche ORDER BY kalenderwoche DESC

    Leider bekommt ich die zwar das max-Datum zu jeder Kalenderwoche aber die Werte stimmen nicht zum Datum überein. Wenn ich noch den "wert" mit in die Gruppierung ziehe, zeigt wer wieder alle Zeilen aus der Datenbank an.

    Was mach ich hier falsch (

    Einen Kommentar schreiben:


  • akretschmer
    antwortet
    Aggregation mit max() und dann nach allen nicht-aggregierten Spalten gruppieren.

    Einen Kommentar schreiben:

Lädt...
X