Jump to content
Marcio Anderson

postgresql - ORDER BY e/ou ROW_NUMBER()

Recommended Posts

Olá,

Como realizar uma ordenação quando a ordem lógica entre uma linha e outra é de forma subsequente em zigue-zague conforme abaixo:

"hora_entrada";"hora_saida";"order_by_hora_entrada";"order_needed" 
"2014-12-30 10:12:00";"2014-12-30 10:34:00";1;1 
"2014-12-30 10:34:00";"2014-12-30 11:20:00";2;2 
"2014-12-30 11:06:00";"2014-12-31 17:03:00";3;5 
"2014-12-30 11:20:00";"2014-12-30 11:21:00";4;3 
"2014-12-30 11:21:00";"2014-12-30 11:06:00";5;4 
"2014-12-31 17:03:00";"2015-01-02 10:06:00";6;6 
"2015-01-02 09:19:00";"2015-01-02 09:25:00";7;8 
"2015-01-02 10:06:00";"2015-01-02 09:19:00";8;7 

Se obedecer a ordem "hora_entrada", acima estará correto conforme a coluna 3, mas preciso da ordem hora_entrada > hora_saida > hora_entrada (próxima linha), considerando que a hora_saida de uma linha é igual a hora_entrada da linha a seguir, conforme coluna 4. Verifique que a ordem é bem diferente.

OBS: esses erros ocorreram quando entre a entrada e a saída pode haver divergências no horário de verão da tramitação.

Posso ordenar de forma direta ou utilizando row_number?

Agradeço a ajuda!

Share this post


Link to post
Share on other sites

Tem saidas posteriores a entrada , esta certo isto !?

 

Um simples order by entrada não resolve !?

Share this post


Link to post
Share on other sites

Motta,

 

Não resolve, pois em algumas linhas entrada >> saída ocorre a hora de diferença no horário de verão, então as interligações são em zigue-zague (primeira entrada >> saida >> entrada >> saida >>... última saída). A ligação é possível, pois a saída de uma linha é igual a entrada de uma outra linha. Veja bem abaixo e perceberá que há uma sutil inversão de ordens quando diferencio o order by direto para esse outro método:

 

"hora_entrada";"hora_saida";"order_by_hora_entrada";"order_needed"
"2014-12-30 10:12:00";"2014-12-30 10:34:00";1;1
"2014-12-30 10:34:00";"2014-12-30 11:20:00";2;2
"2014-12-30 11:06:00";"2014-12-31 17:03:00";3;5
"2014-12-30 11:20:00";"2014-12-30 11:21:00";4;3
"2014-12-30 11:21:00";"2014-12-30 11:06:00";5;4
"2014-12-31 17:03:00";"2015-01-02 10:06:00";6;6
"2015-01-02 09:19:00";"2015-01-02 09:25:00";7;8
"2015-01-02 10:06:00";"2015-01-02 09:19:00";8;7

 

A ordem acima está pela hora_entrada asc, mas veja no destaque, a interligação da hora_saida para hora_entrada da linha posterior, que não obedece a mesma classificação.

Share this post


Link to post
Share on other sites

Não tenho certeza de ter enendido a questão mas tentou fazer um join na mesma tabela unido

hora-saida com hora-entrada ?

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By rsrodrigoam
      Alguém poderia me ajudar com a seguinte consulta?   Tab_base gtin(PK) | cod_entr | aliq_entr | cod_saida | aliq_saida     Tab_consulta cod_barra | cod_entr | aliq_entr | cod_saida | aliq_saida | status_saida | corr_saida | status_entr | corr_entr    A Tab_consulta é importada e deve consultar se existe o cod_barra igual ao gtin da Tab_base. Em caso positivo, preciso consultar os campos que tem informação na Tab_consulta de códigos e alíquotas, quando tiver informação cruzar com a Tab_base para validar se está correto, se estiver correto (status_* = 'OK'), se estiver diferente (status_* = 'inválido' and corr_* = "alíquota certa vindo da Tab_base").   Desde já agradeço a ajuda.
    • By reginaldo123
      quero fazer uma consulta que retorna as ultimas mensagens por data e agrupa pelo id_an

      $query="SELECT id_mensagem ,id_an,id_usuario,mensagem,data,id_p FROM mensagem WHERE  id_usuario='{$id_usuario}' ORDER BY data desc
       GROUP by id_an";
      mas esta dando erro a consulta sql
    • By luisfeliperm2
      Quero selecionar 10 noticias do banco de dados, irei utilizar paginação, então na próxima pagina será selecionada da 11-20, 21-30. Só que em todos esses select eu quero que venha a noticia principal que é definida pela coluna "destaque".  O motivo é que eu não quero usar 2 select pra buscar noticias.
      Pra ser bem resumido, eu quero selecionar a noticia principal e depois selecionar mais 10 que podem ser qualquer uma
       
      Tentei da seguinte forma:
      select * from news where destaque = true UNION select * from news ORDER BY id DESC LIMIT 10 OFFSET 1;
    • By alekaspary
      Bom dia Amigos.
      Preciso fazer uma consulta na tabela baterias que possui as colunas (id, voltagem, reservatorio_id, data) em que me retorne a ultima voltagem gravada no banco de cada reservatório.
       
      OBS:
      1- Usando o ORDER BY juntamento com o GROUP BY, a consulta retorna a voltagem mais antiga gravada no banco;
      2 - LIMIT não pode ser usado, já que serão vários reservatórios a serem consultados;
      3 - Já tentei utilizar o MAX(data), a consulta me retorna a data mais alta, porém com a voltagem mais antiga;
       
      EM anexo imagem com valores fictícios na tabela
       

    • By luisfeliperm2
      Como posso estar recebendo backups todos os dias do banco de dados postgresql através do meu email ? Preciso fazer isso no Windows 2012
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.