SQL Ordenar pontos por distancia.

05/11/2014

0

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,
Gleidson Santos

Gleidson Santos

Responder

Posts

05/11/2014

Marisiana Battistella

Boa tarde!

Inclua a clásula ORDER BY no SELECT que retorna esses dados e ordene pelo campo distância e ordem crescente.
ORDER BY DISTANCIA ASC
Responder

06/11/2014

Gleidson Santos

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
Responder

06/11/2014

Marisiana Battistella

Para agrupar os dados você deve incluir a cláusula GROU BY no SELECT e definir a ordem do agrupamento...
Seria + ou - assim:
select PT1,
         PT2,
         DISTANCIA  
from tabela
group by PT1,
    	PT2,
 	DISTANCIA
order by DISTANCIA asc 
Responder

06/11/2014

Gleidson Santos

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.
Responder

06/11/2014

Marisiana Battistella

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.
Responder

07/11/2014

Gleidson Santos

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.
[img:descricao=Exemplo da ordenação dos pontos.]http://arquivo.devmedia.com.br/forum/imagem/362905-20141107-173701.jpg[/img]
Responder

08/11/2014

Marisiana Battistella

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.
ORDEM   PT1   PT2    DISTANCIA 
    1            5      1        0.540 
    2            1      3        0.541 
    3            3      2        2.094 
    4            2      4        4.268
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar