Select Abfrage

JudAD

Fleissiger Benutzer
Beiträge
71
Hallo Zusammen,

ich verzweifle wieder an der Umsetzung einer Abfrage. Ich möchte aus einer Tabelle nur die Werte anzeigen bei denen in APLATZ der Wert 50-01 enthalten ist und in POSID der höchste Wert je BELEG ist! Das wäre die Beispieltabelle

BELEG APLATZ POSID
87381 | 50-01 | 40
87381 | 36-01 | 50
87481 | 36-01 | 20
87740 | 60-07 | 10
87740 | 35-05 | 20
87740 | 50-01 | 30
87740 | 36-01 | 40
87740 | 60-03 | 50
88353 | 60-02 | 10
88353 | 22-02 | 20
88353 | 50-01 | 30

Und als Ergebnis hätte ich gerne das nur folgender Datensatz ausgegeben wird

88353 | 50-01 | 30

denn nur bei diesem Beleg hat der Datensatz zum APLATZ 50-01 den höchsten POSID Wert je Beleg. Bei alle anderen Datensätzen mit dem APLATZ 50-01 ist der POSID Wert nicht der höchste je Beleg.

Vielen Dank im Voraus
 
Werbung:
Code:
test=*# select * from judad ;
 beleg | aplatz | posid
-------+--------+-------
 87381 | 50-01  |  40
 87381 | 36-01  |  50
 87481 | 36-01  |  20
 87740 | 60-07  |  10
 87740 | 35-05  |  20
 87740 | 50-01  |  30
 87740 | 36-01  |  40
 87740 | 60-03  |  50
 88353 | 60-02  |  10
 88353 | 22-02  |  20
 88353 | 50-01  |  30
(11 Zeilen)

test=*# select * from judad where aplatz = '50-01' and (beleg, posid) in (select beleg, max(posid) from judad group by beleg);
 beleg | aplatz | posid
-------+--------+-------
 88353 | 50-01  |  30
(1 Zeile)

test=*#

sollte auch M$SQL können, denke ich mal ...
 
Hi & danke für die schnelle Antwort.

Ich habe nun die reelen Werte genommen:

select * from judapl03_2 where aplatz_id = '50-01' and (belnr_id, pos_id) in (select belnr_id, max(pos_id) from judapl03_2 group by belnr_id)

Leider bekomme ich beim SQL-Server 2008R2 folgende Meldung:
Meldung 4145, Ebene 15, Status 1, Zeile 1
An expression of non-boolean type specified in a context where a condition is expected, near ','.
 
*Shrug*

Vielleicht kann M$SQL keinen Row-Vergleich a la (a,b) = (x,y), dann halt auf 2 Vergleiche aufdröseln.


.oO( immer diese fehlenden Features woanders ... )
 
vielleicht so:

Code:
test=*# select * from judad j inner join (select beleg, max(posid) from judad group by beleg) foo on j.beleg=foo.beleg and j.posid=foo.max where aplatz = '50-01' ;
 beleg | aplatz | posid | beleg | max
-------+--------+-------+-------+-----
 88353 | 50-01  |  30 | 88353 |  30
(1 Zeile)
 
Meldung 8155, Ebene 16, Status 2, Zeile 2
No column name was specified for column 2 of 'foo'.
Meldung 207, Ebene 16, Status 1, Zeile 2
Invalid column name 'max'.
 
select * from judapl03_2 j inner join (select belnr_id, max(pos_id) from judapl03_2 group by belnr_id) foo on j.belnr_id=foo.belnr_id and j.pos_id=foo.max where aplatz_id = '50-01'

das war die Anweisung
 
man beachte die GROßBUCHSTABEN

Code:
test=*# select * from judad j inner join (select beleg, max(posid) AS VOLL_COOLER_ALIAS from judad group by beleg) foo on j.beleg=foo.beleg and j.posid=foo.VOLL_COOLER_ALIAS where aplatz = '50-01' ;
 beleg | aplatz | posid | beleg | voll_cooler_alias
-------+--------+-------+-------+-------------------
 88353 | 50-01  |  30 | 88353 |  30
(1 Zeile)

test=*#
 
Werbung:
Zurück
Oben