Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2014
    Messaggi
    110

    Query sql ricerca valore piu vicino a quello inserito

    Ciao! io ho una query: "select [tis] from tabella where [disl]= " +testo.text;Solo che la colonna [disl] non ha un incremento di 1 quindi dovrei andare a prendere il valore [disl] più vicino al testo.text.Quale comando sql dovrei usare???

  2. #2
    Utente di HTML.it
    Registrato dal
    Mar 2012
    Messaggi
    39
    Scusa, di che tipo è il campo [disl]?
    Il valore più vicino in che senso? Puoi fare qualche esempio?

  3. #3
    Utente di HTML.it
    Registrato dal
    Mar 2014
    Messaggi
    110
    Il campo [disl] sono dei double e anche tutti gli altri campi delle altre colonne.
    nel textbox viene letto un int o un double che peró non sempre è presente in [disl].
    per questo vorrei trovare il valore piu vicino di disl rispetto al textbox.
    esempio
    disl= 10,23,35,44
    textbox 12
    La query mi deve ritornare il valore di tis dove disl =10(quindi il valore piu vicino a 12)
    spero di essermi spiegato
    grazie

  4. #4
    Utente di HTML.it
    Registrato dal
    Mar 2012
    Messaggi
    39
    Prova così (sostituisci textbox con la variabile contenente il valore di input) :



    SELECT TOP 1 [TIS], DELTA FROM (
    SELECT TOP 1 [TIS], ABS([TIS]-TEXTBOX ) AS DELTA FROM [TIS]
    WHERE C<TEXTBOX
    UNION
    SELECT TOP 1 [TIS], ABS([TIS]-TEXTBOX ) AS DELTA FROM [TIS]
    WHERE C>TEXTBOX
    ) D
    ORDER BY [TIS].DELTA

  5. #5
    Utente di HTML.it
    Registrato dal
    Mar 2014
    Messaggi
    110
    Grande! Grazie. Stasera ci provo e ti faccio sapere ��

  6. #6
    Utente di HTML.it
    Registrato dal
    Mar 2014
    Messaggi
    110
    Scusa ma rileggendo non mi è molto chiara.
    il nome della mia tabella dov e? E il campo disl?
    scusa ma con le query sono agli inizi

  7. #7
    Utente di HTML.it
    Registrato dal
    Mar 2012
    Messaggi
    39
    Ho preso il nome delal tabella [tis] e del campo [disl] dalla query che hai indicato tu all'inizio.
    Non conoscendo il linguaggio con cui devi eseguire la query le la descrivo nei vari passaggi, poi a te tradurla:


    --seleziona il più grande tra i minori
    SELECT TOP 1 [TIS], ABS([TIS]-TEXTBOX ) AS DELTA FROM [TIS]
    WHERE C<TEXTBOX

    --unisce i due risultati in un unico recordset
    UNION

    --seleziona il più piccolo tra i maggiori
    SELECT TOP 1 [TIS], ABS([TIS]-TEXTBOX ) AS DELTA FROM [TIS]
    WHERE C>TEXTBOX

    a questo punto, prendi il valore con delta minore
    SELECT TOP 1 [TIS], DELTA FROM (
    ordinando il risultato per delta
    ) D
    ORDER BY [TIS].DELTA
    Ultima modifica di sierra; 28-07-2014 a 08:58

  8. #8
    Utente di HTML.it
    Registrato dal
    Mar 2014
    Messaggi
    110
    Forse mi son spiegato male:
    nome tabella: tabella
    none campi: tis , disl
    Idtextbox:textbox
    ??????
    e poi Delta che vuol dire?

  9. #9
    Utente di HTML.it
    Registrato dal
    Mar 2012
    Messaggi
    39
    Scusami, ho scritto male io i nomi. Il medoto di estrazione è quello indicato sopra, crei due select che estraggano in base al valore di testo.text i valori più vicini (sia maggiore che minore).
    unisci le due query con UNION.
    Calcoli un nuovo campo chiamato DELTA, formato dalal differenza fra il campo [disl] e testo.text. Tutto in valore assoluto ABS(...).
    A questo punto ottieni un risultato con due record. Composti da due campi, il campo che ti interessa e il capo delta, che mostra la differenza in valore assoluto fra il valore testo.text e il valore [disl].
    A questo punto prendi il primo valore TOP 1 ordinando per il campo delta, ovvero prendi il record con differenza minima in valore assoluto.

  10. #10
    Utente di HTML.it
    Registrato dal
    Mar 2014
    Messaggi
    110
    Ti ringrazio per la pazienza.
    stasera mi ci metto e vedo di provare.

    grazie mille
    ti aggiorno

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.