Announcement

Collapse
No announcement yet.

Amateur bittet um Hilfe bei Select-Abfrage

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Amateur bittet um Hilfe bei Select-Abfrage

    Hallo SQL Fans,

    meine DB enthält in einer Spalte Gleitkommawerte, die ich mit einem Standardwert<br> vergleichen möchte. Die Abfrage soll so formuliert werden, daß nur der Datensatz <br> ausgeben wird, der mit dem verglichenem Wert vollständig übereinstimmt. OK, das ist <br> auch für mich nicht schwierig. Aber, wenn kein Wert vorhanden ist, der vollständig<br> übereinstimmt, dann soll der am nächsten liegende Wert (bzw. Datensatz) ausgegeben<br> werden.

    Als Beispiel will ich das Ganze mal mit Integerwerten kurz demonstrieren. Meine <br> Datenbank enthält in einer Spalte die Werte 1,3,4,7 usw. Der Vergleich mit der <br>
    Zahl 5 soll mir den nächstnäheren Wert ausgeben, in diesem Fall den Datensatz <br>
    mit dem Wert 4. Oh man, da stellt sich auch gleich die nächste Frage. Was passiert <br>
    wenn die Spalte mit dem Wert 2 verglichen wird. Aber ich denke, das sollte erstmal nicht <br> das Problem sein. Ich bräucht eigentlich nur mal einen Tipp zum Lösungsansatz. Bzw. gibt<br>
    es vielleicht eine SQL-Funktion die das für mich erledigt?
    Ich benutze die BDE in<br> Verbindung mit einer Paradox-Tabelle, ergo mußte diese <br> Funktion (oder was auch immer) Paradox-konform sein.

    Vielen Dank im voraus<br>
    Bis den

  • #2
    Hallo Andre,

    angenommen die Spalte ID der Tabelle TEST soll durchsucht werden, dann sieht der SQLcode so aus:

    select id, id - :gesuchterWert from test<br>
    where id = :gesuchterWert<br>
    union<br>
    select max(id), (max(id)-:gesuchterWert) - ((max(id)-:gesuchterWert)*2) from test<br>
    where (id < :gesuchterWert)<br>
    union<br>
    select min(id), min(id) - :gesuchterWert from test<br>
    where (id > :gesuchterWert)<br>
    order by 2<p>

    Die erste Ergebniszeile enthält den gesuchten Datensatz.

    Die Abfrage besteht aus 3 Select-Statements die über union verknüpft sind.

    Die Variable ":gesuchterWert" wird über <b>Query1.ParamByName('gesuchter').asinteger := ... </b> festgelegt.

    Tschüß

    Torste

    Comment


    • #3
      kleine Korrektur,

      Query1.ParamByName('gesuchterWert').asinteger := ...

      Aus zeitlichen Gründen konnte ich den SQL-Code nur auf dem Interbase-Server testen. Ich glaube aber, das er so auch mit <b> Local SQL </b> funktioniert (Paradox ist keine SQL-Datenbank, deshalb muß die BDE SQL simulieren (Local SQL)).

      Tschüß

      Torste

      Comment

      Working...
      X