SQL-Problem: Artikel mit Gewicht der höchsten Auflage
Dilbert
- datenbank
0 Philipp Hasenfratz0 Philipp Hasenfratz0 Oesi50
Hallo zusammen,
nachdem ich das Forumsarchiv erfolglos durchsucht habe stelle ich jetzt doch einen Beitrag ein. Zugegeben, es kann gut sein, dass es schon eine Lösung im Archiv gibt, wenn ja, konnte ich diese aber nicht meinem Problem zuordnen (Transferleistung).
Also nun zu meinem Problem. Ich habe eine Tabelle, die in etwa so aussieht:
ARTIKELNUMMER AUFLAGENNUMMER GEWICHT
------------- -------------- -------
00001 01 365
00001 02 365
00001 03 589
00001 04 401
00035 01 255
00034 01 100
00034 02 098
...
Jeder Artikel hat also eine oder mehrere Auflagen, die unterschiedliche Gewichte haben können.
Mein Ziel: Eine Tabelle, in der immer nur die Artikelnummern und das Gewicht der Aktuellen (MAX) Auflage aufgeführt sind.
Mit der folgenden Abfrage bekomme ich zwar jeweils den Artikel und die aktuellste Auflage aber nicht das Gewicht.
SELECT artikelnummer, MAX(auflagennummer)
FROM artikel
GROUP BY artikelnummer
Ich muss zugeben, dass ich auch eher selten mit komplizierteren SQL-Abfragen arbeite und deswegen nicht gut in Übung mit Unterabfragen und so bin.
Fällt jemand von euch eine Lösung ein?
Vielen Dank schon einmal - auch für Hinweise auf bestimmte Archivartikel!
Viele Grüße
Dilbert
Halihallo Dilbert
[...]
Welches DBMS? - Bitte bei Anfragen zu Datenbanken immer die verwendete DBMS + Version
angeben, denn diese Information ist für die Lösung stets relevant.
Viele Grüsse
Philipp
Halihallo Dilbert
Hi Philipp
[...]
Welches DBMS?
Oracle, Version 8.1.7.4.0
Bitte bei Anfragen zu Datenbanken immer die verwendete DBMS + Version
angeben, denn diese Information ist für die Lösung stets relevant.
Ok, bei weiteren Fragen (die bestimmt kommen ;o)) werd ich mich bessern!
Viele Grüsse
Philipp
Gruß,
Dilbert
Hi,
ich war leider zu bloed es mit 'group by' und 'having' und "Sub-Selects" machen.
Hier etwas SQL-Code von MS, der getestet laeuft. Ggf. anpassen fuer Oracle.
----------
begin
-- Wir nehmen also einen Cursor
declare
SELFHTML_CURSOR cursor for
(
select
ARTIKELNUMMER, max(AUFLAGENNUMMER)
from
SELFHTML_TABLE
group by
ARTIKELNUMMER
)
-- "Arbeitsvariablen"
declare
@ARTIKELNUMMER int,
@AUFLAGENNUMMER_MAX int,
@GEWICHT int
-- Cursor oeffnen
open
SELFHTML_CURSOR
-- "anlesen"
fetch next from
SELFHTML_CURSOR
into
@ARTIKELNUMMER,
@AUFLAGENNUMMER_MAX
-- Abbruchbedingung erfuellt, wenn entsprechende Statusmeldung vom Datenserver kommt
while (@@fetch_status = 0)
begin
set
@GEWICHT =
(
select
GEWICHT
from
SELFHTML_TABLE
where
(ARTIKELNUMMER = @ARTIKELNUMMER) and
(AUFLAGENNUMMER = @AUFLAGENNUMMER_MAX)
)
-- AUSGABE
print
@GEWICHT
-- "weiterlesen"
fetch next from
SELFHTML_CURSOR
into
@ARTIKELNUMMER,
@AUFLAGENNUMMER_MAX
end
-- aufraeumen
close
SELFHTML_CURSOR
deallocate
SELFHTML_CURSOR
end
----------
Gruss,
Lude
Halihallo Dilbert
ARTIKELNUMMER AUFLAGENNUMMER GEWICHT
------------- -------------- -------
00001 01 365
00001 02 365
00001 03 589
00001 04 401
00035 01 255
00034 01 100
00034 02 098
...
Mein Ziel: Eine Tabelle, in der immer nur die Artikelnummern und das Gewicht der Aktuellen (MAX) Auflage aufgeführt sind.
SELECT
a.artikelnummer,
MAX(a.gewicht)
FROM
tabelle a
WHERE
a.auflagennummer >= ALL (
SELECT MAX(b.auflagennummer)
FROM
tabelle b
WHERE
b.artikelnummer=a.artikelnummer
)
GROUP BY
a.artikelnummer
so in _etwa_ (wahrscheinlich ist der Query noch voller Fehler). Er dient lediglich
dem Verständnis, ich kenne mich mit Oracle nicht gut aus.
Was ist der PRIMARY KEY? - (artikelnummer,auflagennummer)?
Viele Grüsse
Philipp
Hi,
so in _etwa_ (wahrscheinlich ist der Query noch voller Fehler).
erfolgreich getestet unter 'MS SQL Server 2000'. *Aerger*
Gruss,
Lude
Halihallo Lude
so in _etwa_ (wahrscheinlich ist der Query noch voller Fehler).
erfolgreich getestet unter 'MS SQL Server 2000'. *Aerger*
TIMTOWTDI, Lude :-)
Es führen mehrere Wege nach Rom...
Viele Grüsse
Philipp
Hi,
so in _etwa_ (wahrscheinlich ist der Query noch voller Fehler).
erfolgreich getestet unter 'MS SQL Server 2000'. *Aerger*TIMTOWTDI, Lude :-)
Es führen mehrere Wege nach Rom...
habe mich selbst vielleicht dreissig Minuten bemueht und dann kommt der Operator 'all' und weist ueberzeugend den Weg. *aerger*
Hast Du noch mehr solche Sachen im Repertoire? ;-)
Gruss,
Lude
Hi Philipp,
vielen Dank! Die Abfrage funktioniert!!!!
Herzliche Grüße
Dilbert
Hallo Dilbert,
wie wärs denn damit:
SELECT artikelnummer, auflagennummer,gewicht
FROM artikel
WHERE auflagennummer IN(SELECT max(auflagenummer) FROM artikel)
Grüße Oesi