2015-01-07 14:36 GMT-02:00 Matheus de Oliveira <matioli.math...@gmail.com>:
> > Isso já foi sugerido. E não funciona, pois ordenaria pelo "id" e não pelos > elementos informados para o IN. No exemplo em questão, o valor "20" foje da > ordem do "id". > Eu só consegui pensar numa *gambiarra* pra fazer funcionar dessa forma (com a ordem dos filtros): postgres=# create table foo( id serial primary key, name text); CREATE TABLE postgres=# insert into foo (name) select 'name ' || generate_series(1,100) as name ; INSERT 0 100 -- workaround starts DROP SEQUENCE IF EXISTS temp_seq; CREATE TEMP sequence temp_seq; -- workaround ends WITH items_parafiltrar as ( SELECT UNNEST(ARRAY[1,5,20,12]) AS filtro ), lista as ( SELECT nextval('temp_seq') As row_number, items_parafiltrar.filtro as item FROM items_parafiltrar ) SELECT foo.id, foo.name , lista.row_number FROM foo, lista where foo.id = lista.item order by lista.row_number; e a saida: postgres-# order by lista.row_number;order by lista.row_number; id | name | row_number ----+---------+------------ 1 | name 1 | 1 5 | name 5 | 2 20 | name 20 | 3 12 | name 12 | 4 (4 rows) Agora, minhas considerações: 1) pra que, OBRIGATORIAMENTE, tem que ser nessa ordem? 2) seria mais elegante fazer sem a sequence, mas a função de row_number (das window functions) precisa de um ordem by e aí já bagunça nossa ordem duvidosa. 3) não precisa ser um array com o filtro, mas convenhamos, é mais fácil digitar no array do que ficar fazendo union dos registros. :P Peguei a idéia desse link[1] pra fazer o row num sem o ordem by. Certamente dá pra usar outra solução ou pensar em algo mais elegante. [1] http://www.postgresonline.com/journal/archives/79-Simulating-Row-Number-in-PostgreSQL-Pre-8.4.html -- Sebastian Webber http://swebber.me
_______________________________________________ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral