wm_concat com order by incorreto

Dúvidas, dicas e truques de SQL, Select, Update, Delete, cláusulas, operações com joins, Funções em SQLs, etc
chunning
Rank: Programador Pleno
Rank: Programador Pleno
Mensagens: 41
Registrado em: Seg, 28 Mar 2011 11:39 am
Localização: Feliz - RS

Bom dia!

Estou com problemas na ordenação ao executar o comando wm_concat ou xmlagg.
Ex. No registro do cartão ponto, tenho uma tabela com as marcações (data e hora) para cada registro entrada 1, saída 1, entrada 2, saída 2. São 4 registros e ao colocar todos os horários juntos, o comando se perde ao ordenar pela hora.
Se eu fizer o select sobre um dia específico, funciona corretamente, mas se colocar de um período maior, ele se perde.

23/08/2016 Ter 354 06:13,11:00,12:15,15:29
24/08/2016 Qua 354 06:15,11:00,12:15,15:20
25/08/2016 Qui 354 06:14,12:15,15:10,11:00

Notem o último registro.

se fizer o select somente sobre o dia 25, fica assim:
25/08/2016 Qui 354 06:14,11:00,12:15,15:10

Como a formatação do horário é transformada em campo char, faço a ordenação pelo campo numérico da hora num subselect interno... Na realidade já fiz de várias formas e sempre ocorre esse problema.

Alguma ideia ???
chunning
Rank: Programador Pleno
Rank: Programador Pleno
Mensagens: 41
Registrado em: Seg, 28 Mar 2011 11:39 am
Localização: Feliz - RS

Olá...
Consegui resolver o problema (meio sem querer...)

Para o meu caso, deu certo após colocar a cláusula "distinct" junto ao parâmetro do wm_concat
ficou assim:
select ... wm_concat(distinct horario) ...

Para a ordenação, não vejo sentido incluir o distinct, mas ...
Dessa forma trouxe as marcações do ponto na sequencia correta que aconteceram...

Obrigado.
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 2 visitantes