Hallo allerseits,
ich nutze eine komplexe Postgresql-Select-Abfrage, welche mir folgendes Resultat ausgibt:
gid
14548
14510
14511
Ich suche nun verzweifelt nach einer Möglichkeit, welche mir das Ergebnis "umgekehrt" ausgibt,
also dann so:
gid
14511
14510
14548
Gibt es so etwas in PostgreSQL?
Danke im voraus, Kai
--
https://www.xing.com/profile/Andreas_Kretschmer7ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
Hi Andreas,
danke erst mal für Deine Antwort.
Es ist keine klassische Sortierung nach Id, Zeitstempel oder ähnlichem geplant.
Im Augenblick führe ich eine SELECT-Anweisung durch, welche mir letztlich die Ids von räumlichen Daten ausgibt, welche dann in einer Karte gezeichnet werden.
Es geht um eine Routinganwendung und ich möchte, dass ich ausgeben kann
1. id: 14511
Straßenname: xyz
Länge xyz
2. id: 14510
Straßenname: xyz
Länge xyz
2. id: 14548
Straßenname: xyz
Länge xyz
Dafür müsste ich eben die ausgegebenen Ergebnisse in Postgresql umdrehen, aber eben ohne Sortierung.
Ich möchte also, dass Zeile 1 die letzte Zeile wird, Zeile 2 die vorletzte etc.
Das macht es so schwierig.
Gibt es dafür wohl eine Lösung?
Was ist mit 'gid' geworden?
Egal:
Du siehst den Trick?Code:test=*# select * from kai; t ------- 14548 14510 14511 (3 rows) test=*# select *, row_number() over () from kai; t | row_number -------+------------ 14548 | 1 14510 | 2 14511 | 3 (3 rows) test=*# select t from (select *, row_number() over () from kai) foo order by row_number desc; t ------- 14511 14510 14548 (3 rows)
Andreas
--
https://www.xing.com/profile/Andreas_Kretschmer7ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
Ah,
ich ahne was Du meinst.
So ganz klappt das hier aber noch nicht.
row_number() wird bei mir nicht als Funktion erkannt; diese müsste ich also erst erstellen?
Und wafür steht: row_number() over ()??
Viele Grüße, Kai
--
https://www.xing.com/profile/Andreas_Kretschmer7ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
Alles klar, vielen Dank an dieser Stelle. :-)
Ich werde mir dann einmal 8.4 installieren.
Beste Grüße, Kai
Hrm:
Das funzt auch mit älteren Versionen. Schön ist aber was anderes. Insbesondere ist nicht schön, daß Du keinerlei Sortierung bisher hast und auf die Ausgabe von PG vertraust. Ohne Angabe einer Sortierung ist die Sortierung undefiniert und kann sich auch ändern. Zum beispiel wenn PG von einer Version zur nächsten die Realisierung von JOINS und anderen Dingen ändert. Ich komme jetzt nicht drauf, was das konkret war, aber zwischen 8.3 und 8.4 z.B. gab es da eine Änderung bei $irgendwas. Was bisher bei 8.3 sortiert rauskam (weil intern sortiert werden mußte) kommt in 8.4 unsortiert raus, weil aus Optimierungsgründen die interne Sortierung entfiel. Wer also in 8.3 darauf vertraute, daß das Resultat (zufällig) sortiert war, fällt damit mit 8.4 auf die Nase ...Code:test=*# create sequence seq_kai; CREATE SEQUENCE test=*# select t from (select *, nextval('seq_kai') as row_number from kai) foo order by row_number desc; t ------- 14511 14510 14548 (3 rows)
Andreas
--
https://www.xing.com/profile/Andreas_Kretschmer7ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
Hallo Andreas,
danke für die Hinweise, ich werde auf kurz oder lang einmal auf 8.4 updaten;
im Augenblick klappt es auch wunderbar mit der Sequence.
Ncohmals danke für Deine Mühe, Kai
Hach, wenn es den Depesz nicht gäbe ...
select * from depesz; » Blog Archive » Waiting for 8.4 – hash based DISTINCT
Andreas
--
https://www.xing.com/profile/Andreas_Kretschmer7ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
Links: Tobias Bauer - IT- und Funkdienstleistungen - Bilderrahmen-kaufen.de - Der Onlineshop für Bilderrahmen & Fotorahmen - Funkforum
Lesezeichen