Ergebnis 1 bis 10 von 10

Thema: SELECT-Ergebnis in "umgekehrter" Reihenfolge ausliefern

  1. #1
    Kai-Behncke ist offline Benutzer
    Registriert seit
    07.01.2008
    Beiträge
    45

    Standard SELECT-Ergebnis in "umgekehrter" Reihenfolge ausliefern

    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

  2. #2
    akretschmer ist offline Super-Moderator
    Registriert seit
    29.10.2006
    Ort
    Dresden
    Beiträge
    5.472

    Standard

    Zitat Zitat von Kai-Behncke Beitrag anzeigen
    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
    Wie sortierst Du denn jetzt? Zwischen dem ersten Resultat und Deimem Wunsch-Resultat ist keine Logig erkennbar. Du sagst zwar umgekehrt, aber Zeile1 bleibt z.B. Zeile 1 und bei den Zahlen ist eher eine zufällige Sortierung zu sehen.

    Also, erkläre Deinen Sortierwunsch!


    Andreas
    --
    ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
    https://www.xing.com/profile/Andreas_Kretschmer7

  3. #3
    Kai-Behncke ist offline Benutzer
    Registriert seit
    07.01.2008
    Beiträge
    45

    Standard

    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?

  4. #4
    akretschmer ist offline Super-Moderator
    Registriert seit
    29.10.2006
    Ort
    Dresden
    Beiträge
    5.472

    Standard

    Zitat Zitat von Kai-Behncke Beitrag anzeigen
    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:

    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)
    Du siehst den Trick?


    Andreas
    --
    ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
    https://www.xing.com/profile/Andreas_Kretschmer7

  5. #5
    Kai-Behncke ist offline Benutzer
    Registriert seit
    07.01.2008
    Beiträge
    45

    Standard

    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

  6. #6
    akretschmer ist offline Super-Moderator
    Registriert seit
    29.10.2006
    Ort
    Dresden
    Beiträge
    5.472

    Standard

    Zitat Zitat von Kai-Behncke Beitrag anzeigen
    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
    Das ist eine windowing-Funktion, gibt es ab 8.4. Du hast also noch kein 8.4, schlecht für dich ...


    Andreas
    --
    ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
    https://www.xing.com/profile/Andreas_Kretschmer7

  7. #7
    Kai-Behncke ist offline Benutzer
    Registriert seit
    07.01.2008
    Beiträge
    45

    Standard

    Alles klar, vielen Dank an dieser Stelle. :-)
    Ich werde mir dann einmal 8.4 installieren.

    Beste Grüße, Kai

  8. #8
    akretschmer ist offline Super-Moderator
    Registriert seit
    29.10.2006
    Ort
    Dresden
    Beiträge
    5.472

    Standard

    Zitat Zitat von akretschmer Beitrag anzeigen
    Das ist eine windowing-Funktion, gibt es ab 8.4. Du hast also noch kein 8.4, schlecht für dich ...


    Andreas
    Hrm:

    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)
    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 ...


    Andreas
    --
    ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
    https://www.xing.com/profile/Andreas_Kretschmer7

  9. #9
    Kai-Behncke ist offline Benutzer
    Registriert seit
    07.01.2008
    Beiträge
    45

    Standard

    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

  10. #10
    akretschmer ist offline Super-Moderator
    Registriert seit
    29.10.2006
    Ort
    Dresden
    Beiträge
    5.472

    Standard

    Zitat Zitat von akretschmer Beitrag anzeigen
    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 ...


    Andreas
    Hach, wenn es den Depesz nicht gäbe ...

    select * from depesz; » Blog Archive » Waiting for 8.4 – hash based DISTINCT

    Andreas
    --
    ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
    https://www.xing.com/profile/Andreas_Kretschmer7

Ähnliche Themen

  1. SELECT "Jeden x-ten Datensatz"?
    Von mc-bane im Forum SQL
    Antworten: 1
    Letzter Beitrag: 26.03.2012, 11:41
  2. Antworten: 7
    Letzter Beitrag: 03.02.2012, 09:58
  3. Antworten: 0
    Letzter Beitrag: 10.01.2011, 10:26
  4. SELECT Ausgabe "trimmen"
    Von Vera_Am_Mittag im Forum SQL
    Antworten: 4
    Letzter Beitrag: 30.03.2010, 11:39
  5. problem mit "select max()"
    Von Crypi im Forum SQL
    Antworten: 12
    Letzter Beitrag: 06.06.2007, 10:50

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Links: Tobias Bauer - IT- und Funkdienstleistungen   -   Bilderrahmen-kaufen.de - Der Onlineshop für Bilderrahmen & Fotorahmen   -   Funkforum