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

1:n nur letzten Eintrag anzeigen nach Datum oder Key

Dieses Thema im Forum "MySQL und MariaDB" wurde erstellt von SQL_Opfer, 3 Juni 2013.

  1. SQL_Opfer

    SQL_Opfer Neuer Benutzer

    Hallo SQL Gemeinde,

    ich benötige eine Hilfestellung bezüglich einer Anzeige von Daten.
    Um den Import einer Datenbank schnell zu überschauen stell ich mal meine Frage zusammen.

    Ich habe eine Tabelle Produkt wo die Details dessen enthalten sind.
    Dazu habe eine 1:n Verbindung mit der Tabelle Verkauf. Dort werden die tgl. Abverkäufe eingetragen.
    Nun möchte ich von jedem Produkt nur den letzten, egal von wann, Eintrag sehen.
    Das wäre also möglich bei einer Abfrage letztes Datum zu Produktkey oder letzter Verkauskey zu Produktkey
    bis hier her bin ich gekommen

    SELECT dbo.Produkt.Name, dbo.Verkauf.Datum, dbo.Verkauf.Verkauf
    FROM dbo.Produkt INNER JOIN
    dbo.Verkauf ON dbo.Produkt.KEY = dbo.Verkauf.KEY
    ORDER BY dbo.Produkt.Name DESC

    es fehlt mir nur die Einschränkung das ich nicht alle Werte eines Produkts angezeigt bekomme.

    Vielen Dank für die Hilfe
     
  2. akretschmer

    akretschmer Datenbank-Guru


    Wenn Du den letzten Eintrag willst, dann suchst Du eine Aggregation nach max(), in dem Fall Verkauf.Datum. Die Syntax für Dein verwendetes DB-System findest Du im Handbuch. Ich vermute mal, Du hast Dich zu MySQL verlaufen und wolltest eigentlich zu M$SQL.
     
  3. SQL_Opfer

    SQL_Opfer Neuer Benutzer

    Ja, leider Redmonder SQL - vielleicht kanns jemand verschieben
    Und danke für die schnelle Antwort
     
  4. SQL_Opfer

    SQL_Opfer Neuer Benutzer

    Dann bin ich schon eins weiter
    Code:
    SELECT dbo.Produkt.Name, Max(dbo.Verkauf.Datum),
    FROM dbo.Produkt INNER JOIN
    dbo.Verkauf ON dbo.Produkt.KEY = dbo.Verkauf.KEY
    ORDER BY dbo.Produkt.Name DESC
    GROUP BY dbo.Produkt.Name
    Hat gut funktioniert.
    Wenn ich nun ein zweites Feld in die Abfrage mit aufnehme zeigt er wieder mehrere Ergebnisse an. Wie kann man das wieder auf den letzte Verkauf beschränken?
    Code:
    SELECT dbo.Produkt.Name, Max(dbo.Verkauf.Datum), dbo.Verkauf.Anzahl
    FROM dbo.Produkt INNER JOIN
    dbo.Verkauf ON dbo.Produkt.KEY = dbo.Verkauf.KEY
    ORDER BY dbo.Produkt.Name DESC
    GROUP BY dbo.Produkt.Name, dbo.Verkauf.Anzahl
     
  5. akretschmer

    akretschmer Datenbank-Guru


    Du hast: (vereinfacht)

    Code:
    test=*# select * from verkauf ;
     produkt | datum | menge
    ---------+-------+-------
           1 |     1 |    10
           1 |     2 |    12
           1 |     3 |     8
           2 |     1 |     8
           2 |     2 |    18
           2 |     3 |    19
    (6 rows)
    
    Es geht:

    Code:
    test=*# select produkt, max(datum) from verkauf group by produkt;
     produkt | max
    ---------+-----
           1 |   3
           2 |   3
    (2 rows)
    
    Nun willst Du noch die menge wissen. Eine mögliche Lösung:

    Code:
    test=*# select * from verkauf where (produkt, datum) in (select produkt, max(datum) from verkauf group by produkt);
     produkt | datum | menge
    ---------+-------+-------
           1 |     3 |     8
           2 |     3 |    19
    (2 rows)
    
    Andreas
     
  6. SQL_Opfer

    SQL_Opfer Neuer Benutzer

    Vielen Dank
    Hat sehr geholfen.
     
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