Abfrage eines Max-Wertes

andreas029

Neuer Benutzer
Beiträge
4
Hallo, ich bin bei neu hier und habe eine Frage: Ich habe folgende Tabelle mit einer einzigen Spalte:

Datei-Version
A-0
A-1
A-2
B-0
B-1

Dabei handelt es sich bei den Buchstaben um Dateinamen und bei der Zahl um die zugehörige Versionsnummer. Ziel meiner bislang vergeblichen SQL-Abfrage ist, nur die Datei mit der höchsten Versionsnummer anzuzeigen, also A-2 und B-1.

Leider komme ich nicht weiter, hat jemand eine Idee?

Viele Grüße Andreas
 
Werbung:
wegwerfen und richtig machen. ... ?
Ja. Du mixt 2 Dinge in einem Feld. Dazu kommt, daß Du etwas numerisch vergleichen willst, was als String vorliegt. Das geht alles auf Dauer nicht gut. Stell Dir vor, Du suchst eines Tages die höchste/niedrigste Version. In kurz: das fällt Dir sowieso irgendwann als Trümmerhaufen vor die Füße - darauf solltest Du nicht warten...
 
zur Not kann man natürlich auch sowas machen ...

Code:
edb=*# create table andreas029 (muell text, version int generated always as (regexp_replace(muell,'^.*-','')::int) stored);
CREATE TABLE
edb=*# insert into andreas029 (muell) values ('A-0');
INSERT 0 1
edb=*# insert into andreas029 (muell) values ('A-1');
INSERT 0 1
edb=*# insert into andreas029 (muell) values ('A-10');
INSERT 0 1
edb=*# insert into andreas029 (muell) values ('A-2');
INSERT 0 1
edb=*# select * from andreas029 ;
 muell | version
-------+---------
 A-0   |       0
 A-1   |       1
 A-10  |      10
 A-2   |       2
(4 rows)
 
noch mal etwas anders ...

Code:
edb=*# create table andreas029 (muell text, datei text generated always as (regexp_replace(muell,'-.*$','')) stored, version int generated always as (regexp_replace(muell,'^.*-','')::int) stored);
CREATE TABLE
edb=*# insert into andreas029 (muell) values ('A-0');
INSERT 0 1
edb=*# insert into andreas029 (muell) values ('A-1');
INSERT 0 1
edb=*# insert into andreas029 (muell) values ('A-10');
INSERT 0 1
edb=*# insert into andreas029 (muell) values ('B-0');
INSERT 0 1
edb=*# insert into andreas029 (muell) values ('B-2');
INSERT 0 1
edb=*# select datei, max(version) from andreas029 group by datei order by datei;
 datei | max
-------+-----
 A     |  10
 B     |   2
(2 rows)
 
Werbung:
Zurück
Oben