Aprenda PL/SQL

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
  

Mensagemem Sex, 25 Nov 2016 7:49 am

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
Localização: Feliz - RS

Mensagemem Sex, 25 Nov 2016 9:53 am

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.
chunning
Localização: Feliz - RS



Voltar para SQL

Quem está online

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