PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Alle Zeilen bis auf die mit der höchsten ID [DB2]



clumsy
25-06-2008, 14:49
Servus,

ich habe nach einer Abfrage eine Ergebnismenge, die mir mehrere Zeilen liefert. Diese Zeilen sind bis auf die ID-Spalte identisch. zB:


ID | Hostname
10 | name01
11 | name01
12 | name01
13 | name01
14 | name02
15 | name03
16 | name03


Jetzt will ich zu jedem Hostnamen, der mehrfach vorkommt, alle IDs ausser der höchsten ID. Also:


10 | name01
11 | name01
12 | name01
15 | name03


Leider schaff ich´s nicht, die entsprechende SQL-Abfrage zu basteln.
Habt ihr nen Tip?

Danke,
clumsy

jeebee
25-06-2008, 15:03
Ich denke, das sollte sich mit GROUP BY und MAX (evtl auch noch ein UNION) machen lassen. Hab allerdings gerade keine Zeit, selbst zu basteln. Etwas in der Art:
SELECT * FROM ... GROUP BY Hostname WHERE ID < MAX(ID)

jeebee
25-06-2008, 15:22
hab jetzt doch noch was rumgespielt, das hier geht mit mysql:
select ID, Hostname from (select * from Test, (select Hostname as hn, max(ID) as biggest from Test group by (Hostname)) a where Test.Hostname = a.hn) t where t.ID < t.biggest; wobei Test eine Tabelle mit den von dir genannten Daten ist.

Es geht wohl noch einfacher...

clumsy
25-06-2008, 15:23
super, danke. ich hab jetzt auch noch nelösung mit EXCEPT hinbekommen. Deine < MAX(subselect) funktioniert auch :)

jeebee
25-06-2008, 15:24
Ok, schön :)

jan61
25-06-2008, 19:28
Moin,

geht auch kürzer so:
select a.id, a.hostname from test a
where a.id <
(select max(id) from test where hostname = a.hostname)Jan

jeebee
25-06-2008, 19:35
Ich dachte, meins sei zu lang, hatte aber gerade keine Zeit noch lang daran zu feilen...