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

Wert aus ersten vorhandenen Vorgangszähler

Dieses Thema im Forum "MySQL und MariaDB" wurde erstellt von mymomo, 21 März 2016.

  1. mymomo

    mymomo Neuer Benutzer

    Moin!

    Ich hoffe ihr könnt mir helfen.
    Folgendes Szenario:

    Ein Kunde übernimmt ein bestehendes Karten-Guthabensystem, beginnt aber mit einer neuen Datenbank. Der Vorgangszähler jeder am System teilnehmenden Karte bleibt auf der Karte selbst aber erhalten.

    Der Kunde möchte nun gerne wissen, wieviel Guthaben auf jeder Karte war, als sie das erste Mal mit der neuen Datenbank in Berührung kam.

    Wir haben folgende relevanten Spalten:
    Laufnummer
    Vorgangszähler
    altesGuthaben

    Ich möchte nun für jede in der Tabelle (UMS_TC_U) vorhandenen Laufnummer den niedrigsten Vorgangszähler auslesen und das dort befindliche altesGuthaben auslesen.
    Ich bekomm es leider nicht hin :eek:(
     
  2. akretschmer

    akretschmer Datenbank-Guru

    klingt nach eine Aufgabe für min() und having.
     
  3. akretschmer

    akretschmer Datenbank-Guru

    hier mal 2 Lösungen:

    Code:
    test=*# select * from mymomo ;
     lauf | vorgang | guthaben
    ------+---------+----------
      1 |  1 |  10
      1 |  2 |  8
      1 |  3 |  12
      2 |  1 |  13
      2 |  2 |  15
      2 |  3 |  16
      3 |  1 |  33
      3 |  2 |  32
      3 |  3 |  31
    (9 rows)
    
    test=*# select distinct on (lauf) lauf, vorgang, guthaben from mymomo order by lauf, vorgang;
     lauf | vorgang | guthaben
    ------+---------+----------
      1 |  1 |  10
      2 |  1 |  13
      3 |  1 |  33
    (3 rows)
    
    test=*# select * from mymomo where (lauf, vorgang) in (select lauf, min(vorgang) from mymomo group by lauf);
     lauf | vorgang | guthaben
    ------+---------+----------
      1 |  1 |  10
      2 |  1 |  13
      3 |  1 |  33
    (3 rows)
    
     
  4. ukulele

    ukulele Datenbank-Guru

    Ich glaube die Syntax ist nicht MySQL-kompatibel, daher probier mal das hier:
    Code:
    SELECT   t.Laufnummer,
         t.Vorgangszaehler,
         u.altesGuthaben
    FROM   (   SELECT   Laufnummer,
               min(Vorgangszaehler) AS Vorgangszaehler
           FROM   UMS_TC_U
           GROUP BY Laufnummer ) t
    INNER JOIN UMS_TC_U u
    ON     t.Laufnummer = u.Laufnummer
    AND     t.Vorgangszaehler = u.Vorgangszaehler
     
  5. mymomo

    mymomo Neuer Benutzer

    Danke ukulele, das schaut sehr gut aus!

    Auch danke an akretschmer. wie ukulele jedoch schon andeutete, war hier die Syntax falsch.
    Leider habe ich bis auf einfachste Selectanfragen sonst kaum was mit SQL zutun, daher war es mir zumindest spontan nicht möglich rauszufinden, wo der Syntaxfehler bei deinem Aufruf lag. Da ich gestern aber auch keine Zeit mehr hatte mich weiter damit zu beschäftigen und heute Morgen direkt ukulele´s Antwort da war, blieb mir das ja nun eh erspart ;o)
     
  6. akretschmer

    akretschmer Datenbank-Guru

    Tja, ich bin halt verwöhnt ;-)
     
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