cryptkeeper
Goto Top

Datensätze in einer Tabelle vergleichen und aktuellen ausgeben

Hallo liebe Community,
Ich habe ein hoffentlich kleines Problem bei einer Abfrage.

Ich habe eine Tabellenstruktur in dieser Form:
Artikelgruppe | Artikel | Preis gültig ab | Preis
------------------------------------------------------------
10                    | 123     |  01.01.2011      | 2,50
10                    | 123     |  20.05.2011      | 2,99
10                    | 234     |  01.01.2011      | 2,50
10                    | 345     |  01.01.2011      | 2,50
10                    | 345     |  31.08.2011      | 1,99
Ich brauche nun zu den Artikeln die aktuell gültigen Preise. Also eine Ausgabe in dieser Form:
Artikelgruppe | Artikel | Preis gültig ab | Preis
------------------------------------------------------------
10                    | 123     |  20.05.2011      | 2,99
10                    | 234     |  01.01.2011      | 2,50
10                    | 335     |  31.08.2011      | 1,99
Irgendwie komme ich da aber nicht hin. Wie müsste ich denn die Abfrage gestalten um zum gewünschten Ergebnis zu kommen?

Vielen Dank schon mal

Andreas

Content-Key: 180946

Url: https://administrator.de/contentid/180946

Printed on: July 17, 2024 at 19:07 o'clock

Member: Indrador
Indrador Feb 23, 2012 at 12:44:42 (UTC)
Goto Top
Hi,

das Select sollte funktionieren:

Folgt

Attribute wie "Preis gültig ab" sind im übrigen pfuibah, man benutzt keine deutschen Umlaute und leerzeichen sind auch alles andere als Professionell, dann lieber "Preis_gueltig_ab"

Gruß
Member: CryptKeeper
CryptKeeper Feb 23, 2012 at 13:30:43 (UTC)
Goto Top
Hallo Indrador

Vielen Dank für die schnelle Antwort.

Das mit Umlauten und Leerzeichen ist schon klar - diente hier nur zur Vereinfachung der Tabelle.

Irgendwie komm ich aber noch nicht so ganz zurecht. Woher kommen die Werte in deiner zweiten Zeile [FROM [P360_KS].[dbo].[ArtikelStaffelpreis] --where PK_Angebotsartikel = 21344 ]?

Meine Tabelle heißt "ArtPreise". Wie müsste da die zweite Zeile richtig aussehen?

Übrigens kämpfe ich mit einer Oracle Datenbank falls das dafür wichtig ist.

Mir geht es darum alle Artikel mit dem aktuell gültigen Preis auszugeben. Also in Worten etwa so:

Wenn ein Artikel zwei mal auftaucht (hier also 123 und 345), dann zeige nur den Preissatz mit dem höchsten Datum an (also 2,99 bzw. 1,99) Wenn man den Zeilen Nummern geben würde, sollten also nur die Zeilen 2,3 und 5 ausgegeben werden.
Das ganze für die komplette Tabelle und nicht für einen speziellen Datensatz.


10 | 123 | 01.01.2011 | 2,50 -> Zeile 1
10 | 123 | 20.05.2011 | 2,99 -> Zeile 2
10 | 234 | 01.01.2011 | 2,50 -> Zeile 3
10 | 345 | 01.01.2011 | 2,50 -> Zeile 4
10 | 345 | 31.08.2011 | 1,99 -> Zeile 5

Ausgabe

10 | 123 | 20.05.2011 | 2,99 -> Zeile 2
10 | 234 | 01.01.2011 | 2,50 -> Zeile 3
10 | 345 | 31.08.2011 | 1,99 -> Zeile 5
Member: Indrador
Indrador Feb 23, 2012 at 14:00:06 (UTC)
Goto Top
Da hat der indrador tief und feste geschlafen, das waren Teile von mir.
Ich schreibe nachher oben was rein.
Member: pi314
pi314 Mar 04, 2012 at 14:22:06 (UTC)
Goto Top
Sers,

da du nicht gesagt hast, welche DB du verwendest, hier mal ein Schuss ins Blaue..

Hier die Tabelle ArtPreise:
Grp  Art   Gueltig      Preis
10   123   01.01.2011   2,5
10   123   20.05.2011   2,99
10   234   01.01.2011   2,5
10   345   01.01.2011   2,5
10   345   31.08.2013   1,99
und dann hier der Select:

select a.*
  from artpreise a
       join (select art, max( gueltig ) maxGueltig
               from artpreise
              where gueltig <= sysdate
              group by art) b on (b.art = a.art and
                                  b.maxGueltig = a.gueltig)
;

ergibt folgendes Ergebnis:
Grp  Art   Gueltig      Preis
10   123   20.05.2011   2,99
10   234   01.01.2011   2,5
10   345   01.01.2011   2,5

so long,
pi314