Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

MAX- Problem - GROUP BY

Dieses Thema im Forum "Microsoft SQL Server" wurde erstellt von db_gustl, 19 Juni 2012.

  1. db_gustl

    db_gustl Benutzer

    Hallo,

    ich habe folgende Abfrage:
    Code:
    SELECT sm.MATNR, MAX(sm.MMSTD) as date, sm.MMSTA
    FROM EM.dbo.v_000_MARC_0000 sm
    WHERE sm.MATNR = 'A5E02523685'
    GROUP BY sm.MATNR, sm.MMSTA
    Diese liefert folgende Tabelle:
    Code:
    MATNR        | date    | MMSTA
    -------------+----------+------------
    A5E02523685  | 20120314 | 13
    A5E02523685  | 00000000 | 34
    Ich möchte aber dass nur der Datensatz angezeigt wird, der bei date den max-wert hat.
    Somit wäre es, zb. bei mysql, logisch einfach nicht nach MMSTA zu gruppieren, aber das verzeiht mit MS SQl ja leider nicht.

    Hat jemand eine Idee wie ich das in einer Abfrage lösen könnte?
    Gruß Gustl

    Edit: Natürlich könnte man in diesem Fall mit limit und order arbeiten, aber ich habe die MATNR nur zum Verständnis gewählt, zum schluss soll die where-Bedingung mit der MATNR wegfallen.
     
  2. PLSQL_SQL

    PLSQL_SQL Datenbank-Guru

    Hy,

    dies würde mit einem Subselect auf jeden Fall gehen!

    Code:
     
    SELECT sm.MATNR
          ,sm.MMSTD as date
          ,sm.MMSTA
    FROM EM.dbo.v_000_MARC_0000 sm
    WHERE sm.MATNR = 'A5E02523685'
    
    --liefert maximales Datum
    AND sm.MMSTD = ( select MAX(sub.MMSTD) 
                        from EM.dbo.v_000_MARC_0000 sub
                        where sub.MATNR = sm.MATNR --JOIN der Unterabfrage mit der "äußeren" Hauptabfrage über "MATNR"
                   )
     
    
    LG
     
  3. ukulele

    ukulele Datenbank-Guru

    Eventuell sollte man hier auch mit HAVING arbeiten, ich kann jetzt aber schlecht beurteilen ob das klappt:
    Code:
    SELECT    sm.MATNR,
            MAX(sm.MMSTD) as date,
            sm.MMSTA
    FROM    EM.dbo.v_000_MARC_0000 sm
    WHERE    sm.MATNR = 'A5E02523685'
    GROUP BY sm.MATNR, sm.MMSTA
    HAVING sm.MMSTD = MAX(sm.MMSTD)
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden