1:n nur letzten Eintrag anzeigen nach Datum oder Key

SQL_Opfer

Neuer Benutzer
Beiträge
4
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
 
Werbung:

akretschmer

Datenbank-Guru
Beiträge
9.028
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


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.
 

SQL_Opfer

Neuer Benutzer
Beiträge
4
Ja, leider Redmonder SQL - vielleicht kanns jemand verschieben
Und danke für die schnelle Antwort
 

SQL_Opfer

Neuer Benutzer
Beiträge
4
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
 

akretschmer

Datenbank-Guru
Beiträge
9.028
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?


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
 
Werbung:
Oben