Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

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!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tem saidas posteriores a entrada , esta certo isto !?

 

Um simples order by entrada não resolve !?

Compartilhar este post


Link para o post
Compartilhar em outros 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.

Compartilhar este post


Link para o post
Compartilhar em outros 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 ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por ckcesar
      Eu tenho uma aplicação no zend com a versão 5.6 e com o postgresql 9.6. Agora eu precisei mudar a versão do meu postgresql para o 16.1, a parte de conexão do bd e consultas sqls funciona perfeitamente, o meu problema está para acessar os meus controllers. Eles não são encontrados em nenhuma rota, quero ver se alguém já passou por esse problema para me ajudar. Obrigado.
    • Por manolegal
      Olá amigos(as) do Fórum.
      Tenho um número inteiro no PHP e preciso inseri-lo no Postgresql com 02 casas decimais.
      Defini o campo no Postgresql do tipo numeric(14,2)
      O valor está assim no PHP:
      2961966 Preciso gravar no BD da seguinte maneira:
      29619.66 Porém está gravando da seguinte forma:
      2961966.00 Tentei utilizando number_format, porém não consegui:
      $numero_bd = number_format($numero, '.', ''); $numero_bd = number_format($numero,2,"."); $numero_bd = number_format($numero,2,","numerovalor_ref_15,2,",","."); Caso alguém possa me ajudar, desde já agradeço.
    • Por Anderson dos reis
      Como usar parecido com o row_number(SQL SERVER) NO MYSQL?
      EX.
       
      SELECT 
      (row_number() over (order by base)) AS ID,
      substring(base,1,7) as Nome,
      substring(base,8,2) as TipoDoRegistro,
      substring(base,10,20) as Matrícula,
      substring(base,30,70) as Plano,
      substring(base,100,22)as NumeroDoCartao,
      substring(base,122,2)+'/'+substring(base,124,2)+'/'+substring(base,126,4)as DataNascimento,
      substring(base,130,96) as Boleto,
      substring(base,226,10)as ValorTotalMensalidades,
      substring(base,236,2)+'/'+substring(base,238,2)+'/'+substring(base,240,4)as DataLimitePagamento,
      substring(base,244,10)as Sequencial,
      substring(base,254,20)as ChaveOrigemRotina
      FROM (
      SELECT ROW_NUMBER() OVER(ORDER BY base) id, base FROM  dbo.testebase
      ) TAB WHERE id % 2 > 0                                                                 
      ORDER BY id
    • Por unset
      Olá, alguém poderia me dar uma luz.
       
      Como faço para ordenar strings que começam com números, exemplo
       
      Tenho uma lista de artigos e os nomes são como abaixo.
       
      1 - NOME DO ARQUIVO 1
      2 - NOME DO ARQUIVO 2
      etc....
      10 - NOME DO ARQUIVO 10
       
      Não consegui ordenar no SELECT com o ORDER BY nome DESC pq o número 10 fica abaixo do 1
       
      Como fazer assim, 1,2,3,4,5....... 10,11,12 .... 100, 101,102 etc...
    • Por manolegal
      Bom dia
      No cálculo de total de meses entre 02 datas no Postgresql, a consulta está trazendo o valor sem considerar o "dia do mês", ou seja, não está considerando se o dia da data inicial é igual ou superior ao dia da data final:
      SELECT (CAST(TO_CHAR(AGE('2020-04-29', '2019-07-28'),'MM') AS INTEGER) + (CAST(TO_CHAR(AGE('2020-04-29', '2019-07-28'),'YY') AS INTEGER))*12) AS MESES; Neste caso, o resultado deveria se "8", porém está retornando "9". Como faço para resolver este problema?
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.