Delete Abfrage zur Löschung des schlechteren Angebots

Hojobert

Neuer Benutzer
Beiträge
2
Hallo Liebe DB-Community,

mir will kein SQL-Befehl gelingen, welcher folgendes Problem Löst. Die Tabelle heißt "Angebot".

Wie Ihr an dem Bild erkennen könnt, entspricht jede Zeile einem Angebot eines Zulieferers. Manche Produkte werden nur von einem Zulieferer Angeboten, manche Produkte von mehreren. Das Ziel ist es, bei doppelten Angeboten das schlechtere (in der Tabelle Rot) herauszulöschen.

Accessproblem.PNG

Da mir keine präzise Problembeschreibung einfällt, wurde ich auch über die Sufu nicht fündig.

Freue mich auf Euer Feedback!

Grüße Nico
 
Werbung:
Hallo Liebe DB-Community,

mir will kein SQL-Befehl gelingen, welcher folgendes Problem Löst. Die Tabelle heißt "Angebot".

Grüße Nico

In PG würde es so gehen:
Code:
test=*# select * from angebot ;
 id |  p  | preis
----+----------+-------
  1 | produkt1 |  10
  2 | produkt1 |  20
  3 | produkt2 |  30
  4 | produkt3 |  40
  5 | produkt4 |  50
  6 | produkt4 |  450
(6 rows)

test=*# select *, row_number() over (partition by p order by preis asc) from angebot ;
 id |  p  | preis | row_number
----+----------+-------+------------
  1 | produkt1 |  10 |  1
  2 | produkt1 |  20 |  2
  3 | produkt2 |  30 |  1
  4 | produkt3 |  40 |  1
  5 | produkt4 |  50 |  1
  6 | produkt4 |  450 |  2
(6 rows)

test=*# select id, p, preis from (select *, row_number() over (partition by p order by preis asc) from angebot) foo where row_number = 1 ;
 id |  p  | preis
----+----------+-------
  1 | produkt1 |  10
  3 | produkt2 |  30
  4 | produkt3 |  40
  5 | produkt4 |  50
(4 rows)

Du kannst dies machen:

Code:
test=*# select p, min(preis) from angebot group by p;
  p  | min
----------+-----
 produkt3 |  40
 produkt4 |  50
 produkt2 |  30
 produkt1 |  10
(4 rows)


Damit hast die besten Preise, aber nicht mehr die anderen Infos. Die kannst Du aber dran-joinen. Das überlasse ich Dir nun zur Übung.
 
Werbung:
Zurück
Oben