none
Fazendo uma pesquisa inexata RRS feed

  • 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

    quarta-feira, 30 de maio de 2012 11:25

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

    quarta-feira, 30 de maio de 2012 12:17

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

    quarta-feira, 30 de maio de 2012 12:10
  • 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

    quarta-feira, 30 de maio de 2012 12:17
  • Caro Thiago Coelho,

    Fiz as adaptações necessárias para funcionar no Access (que é o meu caso) e atendeu ao que preciso.

    Valeu mesmo!

    Paulo Ricardo Ferreira

    quarta-feira, 30 de maio de 2012 12:42