mirkow
Goto Top

Select Anweisung mit dynamischer Spalte bestehend aus Max-Wert

Hi Ihrs,

ich suche nach einer Lösung, wie ich im SQL eine Max-Spalte hinzufügen kann.

in einer Tabelle gehören jeweils 2 bis 3 Datensätze zusammen.

ein Beispiel :

ID SUB_ID VALUE NUMBER
1 1 1234 0
2 1 5678 1
3 1 4321 2
4 2 8765 0
5 2 1234 1
6 3 4321 0
7 3 8754 1
8 3 1234 2


und ich möchte jeweils den höhsten Number-Wert mit an den Datensatz hängen. also ne virtuelle Spalte mit der Bezeichnung MaxNumber

und das soll dann so aussehen :

ID SUB_ID VALUE NUMBER MaxNumber
1 1 1234 0 2
2 1 5678 1 2
3 1 4321 2 2
4 2 8765 0 1
5 2 1234 1 1
6 3 4321 0 2
7 3 8754 1 2
8 3 1234 2 2

in Access bekomme ich es einwandfrei hin, indem ich eine Abfrage erstelle, in der alle Feldern aufgelistet werden und in der 2. Abfrage der Max-Wert ausgerechnet wird und die SUB-ID als beziehung verwendet.

Content-ID: 71910

Url: https://administrator.de/forum/select-anweisung-mit-dynamischer-spalte-bestehend-aus-max-wert-71910.html

Ausgedruckt am: 16.02.2025 um 23:02 Uhr

MCClane
MCClane 25.10.2007 um 14:28:02 Uhr
Goto Top
Also

ich schreib das jetzt mal so vorsich hin:
table ist deine Tabelle aber schon mit einer leeren MaxNumber Spalte (int) hoffe das geht für dich.

So jetzt das UPDATE

UPDATE table SET MaxNumber = MAX(NUMBER) WHERE sub_id = '1';

UPDATE table SET MaxNumber = MAX(NUMBER) WHERE sub_id = '2';

UPDATE table SET MaxNumber = MAX(NUMBER) WHERE sub_id = '3';

Hoffe das geht so habe es nicht getestet.
Gruss MCClane
MirkoW
MirkoW 25.10.2007 um 14:49:10 Uhr
Goto Top
Hi,

naja also ich wollte eigentlich keine Updateprozedur ausführen sodern lediglich nur einen sql select query ausführen. des weiteren sind die Daten dynamisch. also es gibt mehr als nur eine Sub-ID
bastel
bastel 25.10.2007 um 16:13:02 Uhr
Goto Top
Select MAX(LINIE) FROM TABELLE GROUP BY ZEILE;

ungefaehr so koennte das aussehen, koenntest noch ein Synonym einfügen etc...
Biber
Biber 25.10.2007 um 16:52:59 Uhr
Goto Top
Moin MirkoW,

bitte schreib noch mal kurz, um was für eine DB es geht.

Eher lassen sich keine speziellen Statements zusammenschreddern.

Funktionieren mit den meisten DBMSen müsste:
Select Id, Subid, value, number, maxnumber
From IDSubId, 
(select subid as subid2 ,
max(number) as maxnumber
   FROM IDSubid  group by subid)
where  Subid=SubId2;

[die Tabelle heißt bei mir IDSubId, die Feldnamen wie bei Dir.]

Grüße
Biber
MirkoW
MirkoW 25.10.2007 um 18:19:34 Uhr
Goto Top
hi,

wie funktioniert dies unter einer DB2 Datenbank ? da Subid=subid2 leider nicht funktioniert
Biber
Biber 25.10.2007 um 19:31:11 Uhr
Goto Top
Moin MirkoW,

genau das meinte ich vorhin mit "mal das Datenbanksystem nennen". Danke.
Select Id, Subid, value, number, d.maxnumber
From db2Tabelle, 
(select subid as subid2 ,
max(number) as maxnumber
   FROM db2tabelle  group by subid) d
where  Subid=d.SubId2;

Unter DB2 braucht die 2. "Tabelle" , also das, was nach dem ersten "From Db2Tabelle " in Klammern steht, einen so genannten CORRELATION NAME.

Den habe ich jetzt dazu gepackt (der Buchstabe "d" oben.) Das reicht.

Oben habe ich (mehr aus Gewohnheit denn aus Notwendigkeit) alle Felder aus dieser "Tabelle d" auch mit einem entsprechenden Präfix versehen.

Genauso fliegt aber:
SELECT Id, Subid, value, number, maxnumber
FROM db2Tabelle, 
(SELECT subid              AS subid2 ,
              max(number) AS maxnumber
   FROM db2tabelle     GROUP BY subid) d
   WHERE  Subid=SubId2;

Grüße
Biber
MirkoW
MirkoW 25.10.2007 um 19:37:47 Uhr
Goto Top
vielen Dank. werds morgen mal ausprobieren.
Biber
Biber 31.10.2007 um 20:00:50 Uhr
Goto Top
Moin MirkoW,

vielen Dank. werds morgen mal ausprobieren.
Hmm, wenn die Query jetzt immer noch läuft, dann brich es lieber ab.
Dann habe ich doch noch einen Fehler drin...face-wink

Grüße
Biber
MirkoW
MirkoW 31.10.2007 um 20:33:28 Uhr
Goto Top
Hi,

ja hab es natürlich schon zum laufen bekommen.. ohne endlosschleife ;)
Biber
Biber 31.10.2007 um 20:47:08 Uhr
Goto Top
Thx, MirkoW,

falls Du keine Änderungen mehr an dem oben geposteten Schnipsel vornehmen musstest, dann mach bitte so einen grünen Haken dran.

Wenn Du selber die richtige Lösung ausgetüftelt hast, da poste diese.
Und setz das Häkchen dann bitte.

Danke
Biber