Usuário com melhor resposta
Fazendo uma pesquisa inexata

Pergunta
-
Salve!
Tenho uma tabela que contém os seguintes campos:
numOperacao tipo distanciaAcumulada
1 a55 64,83
2 d58 171,00
3 a56 338,28
... ... ...
401 a56 175597,34
402 d58 176233,01
403 d58 176491,36
A minha aplicação vai receber um valor que é uma distância estimada por um outro programa e o que preciso fazer é achar na tabela acima o valor mais próximo daquela distância estimada para conseguir obter os valores de numOperacao e tipo.
Como fazer essa query?
Grato pela atenção de todos.
Paulo Ricardo Ferreira
Respostas
-
Gostei da sugestão que o cara faz aqui: http://www.portugal-a-programar.pt/topic/30097-ajuda-com-query-retornar-valor-mais-proximo/
Acho que vai te ajudar, deve ter mais de uma solução, mas você concorda que o valor mais próximo seria algo assim?
seuvalor = 500
novovalor = módulo(coluna - seuvalor)
a linha onde o novovalor estiver mais próximo de 0, significa que é o valor onde mais se aproxima de seuvalor, aí você procura por min(novovalor):
Declare @x float; SET @x = 1.5; SELECT top 1 numOperacao, tipo, distanciaAcumulada, min(abs(distanciaAcumulada-@x)) AS diferenca FROM TFloat GROUP BY ID, tipo, distanciaAcumulada ORDER BY 3
Abraços!
thiagokoelho
- Marcado como Resposta PRicardo Ferreira quarta-feira, 30 de maio de 2012 12:42
Todas as Respostas
-
Salve!
Fuçando na internet verifiquei que o Excel tem uma função (PROCV) que faz algo parecido.
Dada a distância estimada, esta função retorna o valor mais próximo na lista.
Existe algo parecido no SQL?
Grato pela atenção de todos.
Paulo Ricardo Ferreira
-
Gostei da sugestão que o cara faz aqui: http://www.portugal-a-programar.pt/topic/30097-ajuda-com-query-retornar-valor-mais-proximo/
Acho que vai te ajudar, deve ter mais de uma solução, mas você concorda que o valor mais próximo seria algo assim?
seuvalor = 500
novovalor = módulo(coluna - seuvalor)
a linha onde o novovalor estiver mais próximo de 0, significa que é o valor onde mais se aproxima de seuvalor, aí você procura por min(novovalor):
Declare @x float; SET @x = 1.5; SELECT top 1 numOperacao, tipo, distanciaAcumulada, min(abs(distanciaAcumulada-@x)) AS diferenca FROM TFloat GROUP BY ID, tipo, distanciaAcumulada ORDER BY 3
Abraços!
thiagokoelho
- Marcado como Resposta PRicardo Ferreira quarta-feira, 30 de maio de 2012 12:42
-