PostgreSQL "row_number()"

Alles zum SQL-Dialekt

Moderator: Moderatoren

PostgreSQL "row_number()"

Beitragvon AUGE_OHR » Fr, 17. Aug 2012 20:57

hi,

in der Version 9.x gibt es row_number().

ich habe folgendes "Problem" : bin in Col1 mit ORDER BY Col1 und stehe auf BBB / LLL
nun klicke ich auf den Header von Col2 und er ändert die Sortierung auf ORDER BY Col2

leider stehe ich aber damit nicht mehr auf meinem "Record" BBB / LLL, also muss ich ihn re-positionieren.
Code: Alles auswählen
ORDER BY Col1
--------------
Col1      Col2

AAA      CCC
BBB       LLL      -> hier stehe ich -> __record = 2
CCC      ZZZ
DDD      KKK
EEE       DDD



ORDER BY Col2
--------------
AAA      CCC   -> jetzt steh ich hier
EEE       DDD
DDD      KKK   
BBB       LLL    -> und hier will ich hin -> __record = 2
CCC      ZZZ
ich mache das z.Z. mit einem externen Array.

nun bekam ich den Tip mit "row_number()"
Code: Alles auswählen
test=# create table ohr(col1 text, col2 text);
CREATE TABLE
test=*# copy ohr from stdin;
Enter data to be copied followed by a newline.
End with a backslash and a period on a line by itself.
>> aaa  ccc
>> bbb  lll
>> ccc  zzz
>> ddd  kkk
>> eee  ddd
>> \.
test=*# commit;
COMMIT
test=# select col1, col2, row_number() over (order by col1) from ohr order by col1;
 col1 | col2 | row_number
------+------+------------
 aaa  | ccc  |          1
 bbb  | lll  |          2
 ccc  | zzz  |          3
 ddd  | kkk  |          4
 eee  | ddd  |          5
(5 rows)

test=*# select col1, col2, row_number() over (order by col1) from ohr order by col2;
 col1 | col2 | row_number
------+------+------------
 aaa  | ccc  |          1
 eee  | ddd  |          5
 ddd  | kkk  |          4
 bbb  | lll  |          2
 ccc  | zzz  |          3
(5 rows)

test=*# select col1, col2, row_number() over (order by col2) from ohr order by col1;
 col1 | col2 | row_number
------+------+------------
 aaa  | ccc  |          1
 bbb  | lll  |          4
 ccc  | zzz  |          5
 ddd  | kkk  |          3
 eee  | ddd  |          2
(5 rows)

test=*# select col1, col2, row_number() over (order by col2) from ohr order by col2;
 col1 | col2 | row_number
------+------+------------
 aaa  | ccc  |          1
 eee  | ddd  |          2
 ddd  | kkk  |          3
 bbb  | lll  |          4
 ccc  | zzz  |          5
(5 rows)
gruss by OHR
Jimmy
Benutzeravatar
AUGE_OHR
Marvin
Marvin
 
Beiträge: 10154
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg

Re: PostgreSQL "row_number()"

Beitragvon bgl » Mi, 29. Aug 2012 18:49

Seitdem ich das gelesen habe nehme ich mir vor, damit mal zu experimentieren, aber mir fehlt einfach die Zeit :-(

Trotzdem, das ist überaus nützlich. Sich selber Workarounds dafür zu bauen (CREATE TEMPORARY SEQUENCE...) macht nämlich absolut keinen Spass, und ich weiss, dass ich darauf schon mehr als einmal angewiesen war, weil es meines Wissens nichts entsprechendes in PostgreSQL 8.x gibt/gab.

Also danke für den Hinweis.
bgl
Cut&Paste-Entwickler
Cut&Paste-Entwickler
 
Beiträge: 43
Registriert: Di, 30. Aug 2011 19:45


Zurück zu SQL (Sprache)

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast