max value aus mehreren Tabellen

thomasw89

Neuer Benutzer
Beiträge
4
Hallo.
Ich habe folgendes Problem:
Ich habe eine Tabelle mit den Spalten: appln_id and ipc4
Eine weitere mit w08_2, ipc4 und weight

Ich möchte den max Wert der weight Spalte haben und daneben immer die Bezeichnung aus w08_2 erhalten. Und das für jede appln_id.

Habe es mit dem folgenden Code versucht aber ich erhalte immer alle Werte für die w08_2 Gruppen:
SELECT distinct a.appln_id,
b.w08_2,
max(b.weight) as weight
FROM tls209_appln_ipc a
left outer join (select w08_2, max(weight) as weight, ipc4
from public.tls_contable
group by w08_2, ipc4) b
on b.ipc4=a.ipc4 and b.weight >0

WHERE a.appln_id<3
group by a.appln_id, b.w08_2
order by appln_id,weight DESC;

Vielen Dank im Vorhinein für eure Hilfe!
Ich hoffe ich habe alles notwendige eingefügt um das Problem zu lösen.
 
Werbung:

Kampfgummibaerlie

Datenbank-Guru
Beiträge
528
Code:
select max((select first.date from first union select second.date from second))

einfach in die Max-Funktion einen Sub-Query einbauen ;)

Bin derzeit in der Schule, werde mich damit zuhause näher befassen ;)
 

thomasw89

Neuer Benutzer
Beiträge
4
Das habe ich schon versucht aber dann erhalte ich den Fehler mit "... mehr als ein Wert in der Ausgabe enthalten..."
 

Kampfgummibaerlie

Datenbank-Guru
Beiträge
528
Code:
select max((select max(first.date) from first union select max(second.date) from second))

funktionierts so?
einfach überall die Max-Funktion eingebaut ;)
 

thomasw89

Neuer Benutzer
Beiträge
4
leider nicht. das gibt mir nur den max wert der gesamten spalte an aber nicht gruppiert nach der kategorie "w08"

Meine Spalten sollten dann zum schluss so aussehen:
a.appln_idb.w08_2max(weight)
1260,061
2150,5
.........
 

Kampfgummibaerlie

Datenbank-Guru
Beiträge
528
schreib mal die gesamte Datenbankstruktur, damit ich heute Abend noch eine passende Antwort geben kann...
Bitte auch mit dem gewollten Resultat (nochmal bitte)...
 

thomasw89

Neuer Benutzer
Beiträge
4
also, die datenbank sieht wie folgt aus:
tabelle 1:
appln_idipc4
1H01R
2H01R
......

wobei mehrere ipc4 kategorien je appln_id vorkommen können.

Dann hier die tabelle 2:
w08_2ipc4weight
1H01R0,5
2H01R0,6

Und das Endergebnis sollte dann sein:
appln_idw08_2weight
120,6
2100,8
.........

Das bedeutet, ich merge zuerst Tab1 und Tab2 nach ipc4 und dann möchte ich den max Wert von weight und die jeweilige Kategorie "w08_2" in der der Max-Wert enthalten ist.

Meine (neu, habe es abgedatet damit nur eine Zeile mehr vorhanden ist) Abfrage lautet jetzt:
SELECT distinct a.appln_id,
min(b.w08_2),
max(weight) as weight
FROM tls209_appln_ipc a
inner join (select w08_2, max(weight) as weight, ipc4
from public.tls_contable
group by ipc4,w08_2) b
on b.ipc4=a.ipc4 and b.weight >0

WHERE a.appln_id<3
group by a.appln_id--, b.w08_2
order by appln_id,weight DESC;


wobei ich nicht den min-Wert von w08_2 sondern den max-Wert von weight und einfach die Kategorie/Zeile aus der das Maximum kommt.
 
Werbung:

castorp

Datenbank-Guru
Beiträge
367
Wo kommt denn w08_2 = 10 in dem Resultat her? In Deinen Beispieldaten gibt es nur 1 und 2. Am einfachsten ist es wenn Du z.B. ein kleines Beispielscript mit den Tabellen und Testdaten erstellst. Das kann man leicht über DBfiddle teilen

Wenn ich das richtig verstanden habe, willst Du aus der tls_contable Tabelle jeden ipc4 Wert nur einmal haben, und zwar den bei dem Weight am größten ist. Das kann man dann recht einfach mit

Code:
select distinct on (ipc4) *
from tls_contable
order by ipc4, weight desc
bekommen. Das kann man dann zu der anderen Tabelle joinen:

Code:
select *
from tls209_appln_ipc app
  join (
    select distinct on (ipc4) *
    from tls_contable
    order by ipc4, weight desc
  ) ct on ct.ipc4 = app.ipc4
 
Oben