SQL Abfrage

d1no

Neuling
Thread Starter
Mitglied seit
04.05.2007
Beiträge
883
Ort
Paderborn
Hallo,

ich würde gerne folgendes in SQL machen. Jedoch bekomme ich keine funktionierende Abfrage erstellt.

Ich habe eine Tabelle "Bestand" mit den Spalten z.B. "ID", "Nummer" und "Referenz"

Die Spalten "ID" und "Nummer" weisen keine doppelten Werte auf. In der Spalte Referenz befinden sich jedoch doppelte Werte.

Nun möchte ich dass alles aus der Tabelle per Select aufgerufen wird. Jedoch soll nur die Spalte genommen werden in der die "ID" den höchsten Wert aufweist,
falls die gleiche Referenz mehrmals vorkommt.

Beispiel:

ID Nummer Referenz
1 A001 A001
2 A002 A002
3 A003 A003
4 B001 B001
5 B002 B002
6 B003 B001
7 B004 B001

In diesem Fall sollen nur die IDs 1,2,3,5,7 gelesen werden.


Vielen Dank schonmal im Voraus.
 
Wenn Du diese Anzeige nicht sehen willst, registriere Dich und/oder logge Dich ein.
Code:
SELECT DISTINCT Referenz, Nummer, ID FROM tabelle ORDER BY ID DESC;
probier das mal. dann gibt er die tabelle zwar rückwärts aus aber vll gehts ja so
 
GROUP BY nicht vergessen

edit: gut in dem Fall benötigt man es nicht
 
Zuletzt bearbeitet:
stimmt :d das group by referenz fehlt *g*
 
funktioniert so nicht. ich habe dann immer noch die doppelten werte drin.

SELECT DISTINCT Referenz, ID, Nummer
FROM Bestand
GROUP BY Referenz
ORDER BY ID ASC
 
Zuletzt bearbeitet:
Ist etwas komplizierter - sollte aber so gehen (im MS-SQL zumindest):

SELECT tabelle.* FROM tabelle
JOIN (SELECT DISTINCT Referenz FROM tabelle) as xt ON xt.Referenz=tabelle.Referenz AND tabelle.ID=(SELECT MAX(ID) FROM tabelle WHERE Referenz=xt.Referenz)
 
funktioniert so nicht. ich habe dann immer noch die doppelten werte drin.

SELECT DISTINCT Referenz, ID, Nummer
FROM Bestand
GROUP BY Referenz
ORDER BY ID ASC

das kann nit sein das er die doppelten werte von referenz anzeigt. den distinct veranlasst ihn eben immer nur einen anzuzeigen, selbst wenn 2 da wären
 
Code:
SELECT * FROM Bestand GROUP BY Referenz HAVING ID=(SELECT MAX(ID) FROM Bestand GROUP BY Referenz)

Damit solltest du hinkommen.
 
Ist etwas komplizierter - sollte aber so gehen (im MS-SQL zumindest):

SELECT tabelle.* FROM tabelle
JOIN (SELECT DISTINCT Referenz FROM tabelle) as xt ON xt.Referenz=tabelle.Referenz AND tabelle.ID=(SELECT MAX(ID) FROM tabelle WHERE Referenz=xt.Referenz)


das war die lösung :)

danke


einfach 2 selects auf die gleich tabelle per join machen und dann nach grösserer id sortieren und nur das top 1 ergebnis rausgeben.
 
Zuletzt bearbeitet:
Drei Selects und ein Join sind nicht gerade performant. Hast du meine Abfrage probiert? Die sollte das Selbe machen.
 
Hardwareluxx setzt keine externen Werbe- und Tracking-Cookies ein. Auf unserer Webseite finden Sie nur noch Cookies nach berechtigtem Interesse (Art. 6 Abs. 1 Satz 1 lit. f DSGVO) oder eigene funktionelle Cookies. Durch die Nutzung unserer Webseite erklären Sie sich damit einverstanden, dass wir diese Cookies setzen. Mehr Informationen und Möglichkeiten zur Einstellung unserer Cookies finden Sie in unserer Datenschutzerklärung.


Zurück
Oben Unten refresh