PDA

View Full Version : SQL zur Suche von Eintrag mit größtem Wert aus Liste



Miranda
25-10-04, 13:08
Hallo zusammen,

da ich gerade bei einem SQL etwas auf dem Schlauch stehe und nicht weiterkomme, bin ich auf dieses Forum gestoßen. Vielleicht kann mir hier jemand einen guten Tip geben.

Folgende Situation

Werktag Vertragsnr Daten
----------------------------------
1 12345 .......
2 12345 .......
1 54321 .......
2 54321 .......
4 54321 .......

Problem:
In meiner Tabelle stehen jeweils mehrere Zeilen zu der gleichen Vertragsnummer, in diesem Fall also 2 zur 12345 und 3 (nicht fortlaufend numeriert) zur 54321.

Für die weitere Verarbeitung benötige ich in der Tabelle nur noch die Zeilen mit der höchsten Werktags-Nummer pro Vertragsnummer. Die übrigen Zeilen können gelöscht werden.

Fällt jemandem eine einzelne SQL-Abfrage ein, mit der erreicht wird, daß in der Tabelle nur noch die - in diesem Fall 2 - hervorgehobenen Zeilen übrig bleiben.

Da die Tabelle sehr umfrangreich sein kann, möchte ich auf eine Schleife über alle Zeilen gerne verzichten und das Ganze möglichst mit einer einzigen Abfrage erschlagen.

Falls mir jemand einen guten Tip geben könnte, wäre ich dafür sehr dankbar.

Gruß,
Miranda

B.Hauser
25-10-04, 13:42
Hallo Miranda,

hier eine quick und dirty Variante.


DELETE FROM MyLib/MyTable
WHERE digits(Vertrag) concat digits(Werktag)
not in (select digits(Vertrag) concat
digits(max(Werktag))
from MyTable
Group by Vertrag)


Bitte nochmal testen!
Es gibt bestimmt auch elegantere Möglichkeiten

Birgitta

Fuerchau
25-10-04, 14:54
Das reicht so nicht, wenn nicht in einem 3. Feld vermerkt ist, welcher Satz denn tatsächlich der letzte ist (z.B. Zähler oder Datum), da die Kombination Vertrag und Werktag ja mehrfach vorkommen kann:

delete from myfile A
where digits(Vertrag) concat digits(Werktag) concat digits(xxxx)
in (select digits(Vertrag) concat digits(Werktag) concat digits(xxxx)
from myfile b
where a.vertrag=b.vertrag and a.werktag=b.werktag and
a.xxxx < (select max(xxxx) from myfile c where a.vertrag=c.vertrag and a.werktag=c.werktag)
)

Miranda
25-10-04, 15:09
Vielen Dank, mit den Tips habe ich es hinbekommen.

Gruß,
Miranda