Array
(
)

SQL Ordenar pontos por distancia.

Gleidson Santos
   - 05 nov 2014

Bom tarde,
Alguém tem uma ideia de como posso fazer a ordenação destes pontos por menor distancia, utilizando selects SQL. Já tentei algumas formas mas sem resultado.
Na tabela exemplo eu tenho 5 pontos e a distancia entre os mesmos.
Desejo ordenar os pontos sabendo que o ponto inicial é o de numero 5.
Seguindo visualmente os registros podemos ver que a sequencia será 5, 1, 3, 2.
PT1 PT2 DISTANCIA
1 2 2.624
1 3 0.541
1 4 1.698
1 5 0.540
2 1 2.624
2 3 2.094
2 4 4.268
2 5 3.122
3 1 0.541
3 2 2.094
3 4 2.219
3 5 1.072
4 1 1.698
4 2 4.268
4 3 2.219
4 5 1.233
5 1 0.540
5 2 3.122
5 3 1.072
5 4 1.233
Obrigado,

Marisiana
   - 05 nov 2014

Boa tarde!

Inclua a clásula ORDER BY no SELECT que retorna esses dados e ordene pelo campo distância e ordem crescente.
#Código

ORDER BY DISTANCIA ASC

Gleidson Santos
   - 06 nov 2014

Eu preciso agrupar e ordenar os dados, onde o resultado que esperado é:

PT1 PT2 DISTANCIA
5 1 0.540
1 3 0.541
3 2 2.094
2 4 4.268

Marisiana
   - 06 nov 2014

Para agrupar os dados você deve incluir a cláusula GROU BY no SELECT e definir a ordem do agrupamento...
Seria + ou - assim:
#Código

select PT1,
         PT2,
         DISTANCIA  
from tabela
group by PT1,
    	PT2,
 	DISTANCIA
order by DISTANCIA asc 

Gleidson Santos
   - 06 nov 2014

Olá Marisiana, este código não retorna o que necessito - Ele ira retornar todos os registros ordenados por distancia.

Necessito que ele retorne estes valores, conforme exemplo.

PT1 PT2 DISTANCIA
5 1 0.540
1 3 0.541
3 2 2.094
2 4 4.268

Usei agrupamento por MIN(DIS), mas não retorna o que preciso.
Talvez eu tenha que utilizar procedure.

Obrigado pela atenção.

Marisiana
   - 06 nov 2014

O código que postei foi só pra exemplificar o que eu tava mencionando pra te ajudar a entender o que, talvez, esteja faltando fazer no teu código.
Eu entendi o que vc precisa fazer, mas não tenho como dizer como deve ser o SQL apenas olhando o retorno que vc quer obter, sem conhecer a estrutura das tabelas, as FKs, etc.
Se quiser postar o código que vc criou, pode ser que eu consiga te auxiliar de uma forma mais correta e mais precisa.

Gleidson Santos
   - 07 nov 2014

Marisiana,
A tabela que deve ser trabalhada é justamente a que informei no inicio e ela tem apenas os campos PT1, PT2 e DISTANCIA.
Na verdade esta é uma view resultante de um cross join de uma tabela com pontos e coordenadas, onde apliquei uma função para retornar a distancia entre os pontos cadastrados.

Com esta view eu precisaria ordenar, partindo de um ponto especifico, no caso do exemplo é o numero 5.

Acredito que em selects não seja possível fazer.
Na imagem inserida mostro como deveria ser ordenado.
Exemplo da ordenação dos pontos. (Clique na imagem para abrir em uma nova janela)

Marisiana
   - 08 nov 2014

Entendi Gleidson..
Acredito que seja melhor você utilizar um procedimento pra fazer isso e nem vá ser necessário criar a view.
Você poderia incluir uma coluna de nome ORDEM na tabela para identificar a ordem de classificação dos pontos, definindo a posição deles, pode ser 1, 2, 3, 4... ou então, A, B,C...
Assim, caso venha a existir mais pontos, ou menos pontos, você apenas alterará a ordem de classificação deles.
#Código

ORDEM   PT1   PT2    DISTANCIA 
    1            5      1        0.540 
    2            1      3        0.541 
    3            3      2        2.094 
    4            2      4        4.268