Pegando uma carona com Osvaldo Kussama . Eu fiz uma estrutura de teste bem
simples no meu pc.CREATE TABLE pessoa
(
  nome text
)

insert into pessoa values ('Armando');
insert into pessoa values ('Tadeu');
insert into pessoa values ('Roberto');
insert into pessoa values ('Saulo');
insert into pessoa values ('Raphael');

Select * from pessoa order by nome ;

Armando
Raphael
Roberto
Saulo
Tadeu

select case when count(*) > 0 then
(select nome from pessoa where nome > 'Armando' order by nome limit 1)
else (select nome from pessoa where nome  < 'Armando' order by nome desc
limit 1 ) end as nome
from
(select nome from pessoa where nome >'Armando' limit 1) as teste

isso me retornará Raphael já que no ordenação Raphael é o próximo .

select case when count(*) > 0 then
(select nome from pessoa where nome > 'Tadeu' order by nome limit 1)
else (select nome from pessoa where nome  < 'Tadeu' order by nome desc limit
1 ) end as nome
from
(select nome from pessoa where nome >'Tadeu' limit 1) as teste

isso me retornará Saulo pois vai entrar no Else pois o count vai ser  0 já
que não existe ngm abaixo do Tadeu 1 registro acima .

Bom resolve seu problema rs =p mais não recomendo muito utilizar essa
solução já que envolve algumas subqueries e possui algumas limitações já que
so utilizo 1 campo  e tbm não sei o tamanho dessa sua tabela(fora que não é
muito elegante rs , bom mais se quiser tentar refatorar pra otimizar depois
me mande um e-mail pra mim ver suas melhorias rs).Bom pelomenos vi que é
possivel fazer isso atraves de sql e não precisar recorrer a uma linguagem
de backend pra fazer isso xD .

2009/6/25 Roberto Baselio Lopes <[email protected]>

> OK
>
> Imagine uma lista de nomes
>
> Afonso
> Joaquim
> Manuel
> Roberto
> Tadeu
> Zaqueu
>
>
> Eu queria num select informar um nome roberto e ele me retornar o nome
> tadeu que é o proximo registro, ou então me retornar Manuel, que é o
> registro anterior.
>
> O order by que coloquei no select anterior foi apenas par garantir a ordem
> alfabetica
>
>
>
> Roberto Baselio Lopes
> http://www.google.com/profiles/rbaselio
>
>
>
> 2009/6/25 Aldemir Vieira <[email protected]>
>
> Roberto,
>>
>> Que tal você dizer exatamente o que quer que sua query retorne?
>>
>> Pela sua pesquisa, só retornarão usuários cujo nome sejam 'roberto'.
>> Então, mesmo imaginando o que vc queira, seria interessante buscar o
>> seu requisito, ou da aplicação. O que é esse "imediatamente após"? O
>> registro da tabela que está fora dessa query? O "order by" ordena a
>> seleção e não os dados que ficaram de fora do escopo.
>>
>> Vejo que existe um problema básico de entendimento. Explique o que
>> realmente quer.
>>
>> 2009/6/25 Roberto Baselio Lopes <[email protected]>:
>> > Amigos, uma pergunta, como faço para no select abaixo o banco retornar o
>> > registro imeditamente após em ordem alfabetica??
>> >
>> > select * from usuario where nome = 'roberto' order by nome;
>> >
>> >
>> > Obrigado a todos.
>> >
>> > Roberto Baselio Lopes
>> > http://www.google.com/profiles/rbaselio
>> >
>> >
>> > _______________________________________________
>> > pgbr-geral mailing list
>> > [email protected]
>> > https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>> >
>> >
>>
>>
>>
>> --
>> Forte abraço,
>> Aldemir Vieira
>> _______________________________________________
>> pgbr-geral mailing list
>> [email protected]
>> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>>
>
>
> _______________________________________________
> pgbr-geral mailing list
> [email protected]
> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>
>
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a