Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi SQL Abfrage (https://www.delphipraxis.net/26859-sql-abfrage.html)

motu 2. Aug 2004 08:05

Re: SQL Abfrage
 
Zitat:

Zitat von Hansa
Wenn es sich nicht um die ID handelt, was dann ?

Um Messwerte.

Zitat:

Zitat von Hansa
Das hört sich so an, als würdest du nach was suchen, was es nicht gibt und wenn es was nicht gibt, dann nach etwas ähnlichem von nichts. Das ist aber nun mal alles. :mrgreen:

Das ist so falsch. Ich suche zwar nach etwas, das es so direkt nicht gibt, weiß aber ganz genau, das es etwas kleineres und etwas größeres gibt. z.B. meine Werte sehen so aus:
20
30
Wenn ich nun 25 habe, ist der nicht in der DB aber davor und danach gibt es was.

Zitat:

Zitat von Hansa
Ich will damit sagen, daß die Fragestellung so unpräzise ist, daß wohl niemand etwas damit anfangen kann.

Hmm. Trotz langer Überlegung meinerseits war es doch schwierig es halbwegs verstänldich auszudrücken.

Zitat:

Zitat von Hansa
Wie es aussieht gilt das mittlerweile auch für die DB. 8)

Selig sind die geistig Armen.

Hansa 2. Aug 2004 08:11

Re: SQL Abfrage
 
Aha, deine Werte sind "Mess"werte. Wieso sagst du das nicht gleich ? 8)

Zitat:

Zitat von motu
Selig sind die geistig Armen.

Ich will nicht hoffen, daß du selig wirst, denn die Lösung steht schon längst in meinem ersten Beitrag zum Thema. :wall:

teebee 2. Aug 2004 10:27

Re: SQL Abfrage
 
Vielleicht funktioniert ja so etwas in der Art bei Dir: (konnte es nicht richtig ausprobieren, habe nur MySQL und das ist mit UNION und Sortierung überfordert und TOP muss mit LIMIT gemacht werden)
Code:
(SELECT TOP 1 * FROM Messwerte WHERE (Wert<x) ORDER BY Wert DESC) UNION
(SELECT * FROM Messwerte WHERE (Wert=x)) UNION
(SELECT TOP 1 * FROM Messwerte WHERE (Wert>x) ORDER BY Wert ASC);
x ist der gesuchte Messwert.

Gruß, teebee

motu 2. Aug 2004 10:30

Re: SQL Abfrage
 
Zitat:

Zitat von teebee
Code:
(SELECT TOP 1 * FROM Messwerte WHERE (Wert<x) ORDER BY Wert DESC) UNION
(SELECT * FROM Messwerte WHERE (Wert=x)) UNION
(SELECT TOP 1 * FROM Messwerte WHERE (Wert>x) ORDER BY Wert ASC);

Danke. Genau daran arbeite ich grad, dabei bekomm ich aber einen Spaltenfehler. Die ORDER BY Bedingung ist in meinen Augen obsolet, da die Ergebnissmenge von TOP/MAX/GREATEST ja eigentlich nur einen Wert enthalten kann.

Jelly 2. Aug 2004 10:51

Re: SQL Abfrage
 
Zitat:

Zitat von motu
Die ORDER BY Bedingung ist in meinen Augen obsolet, da die Ergebnissmenge von TOP/MAX/GREATEST ja eigentlich nur einen Wert enthalten kann.

Nein, ist sie nicht. Lässt du order by weg, wird nach deinem Primary Key ausgegeben, und top 1 liefert dir den Datensatz mit der kleinsten ID, und nicht den mit dem größten Messwert.

Gruß,
Tom

Robert_G 2. Aug 2004 10:53

Re: SQL Abfrage
 
Moin Motu :hi:

Ich muss sagen, ich habe irgendwie nicht ganz kapiert worum es dir geht. :gruebel:

Ist es so?
  • Wert
    1
    2
    3
    4
    5
    7
Code:
[b]Vorgäger Wert Nachfolger[/b]
  <null>    1           2
       1     2           3
       2     3           4
       3     4           5
       4     5      <null>
Das wäre würdest du so hinbekommen:
SQL-Code:
SELECT Ref.DeinFeld As Val
      ,Tab1.DeinFeld As Pred
      ,Tab2.DeinFeld As Succ
FROM  DeineTabelle Tab1
      ,DeineTabelle Tab2
      ,DeineTabelle Ref
WHERE Tab1.DeinFeld = Ref.DeinFeld - 1 And
       Tab2.DeinFeld = Ref.DeinFeld + 1

teebee 2. Aug 2004 10:57

Re: SQL Abfrage
 
Ich habs mit MySQL gemacht und da gibt es kein TOP, da muss man es mit ORDERBY und LIMIT 'emulieren', Du kannst Dir das ORDERBY also tatsächlich sparen. Ein Statement, das auf jeden Fall funktioniert (habe es jetzt direkt im MySQL-Client getestet und nicht in MySQL-Front, was offensichtlich mit geklammerten Statements nicht klarkommt) ist dieses hier:
Code:
(SELECT * FROM Messwerte WHERE (wert<x) ORDERBY wert DESC LIMIT 1) UNION
(SELECT * FROM Messwerte WHERE (wert=x)) UNION
(SELECT * FROM Messwerte WHERE (wert>x) ORDERBY wert LIMIT 1);
Gruß, teebee

Jelly 2. Aug 2004 10:59

Re: SQL Abfrage
 
Zitat:

Zitat von Robert_G
Ich muss sagen, ich habe irgendwie nicht ganz kapiert worum es dir geht. :gruebel:

Hallo Robert_G,

gesucht wird zu einem Messwert x dessen direkter kleinster und größter Nachbar.

Bsp: Messwerte = (4,5,7,8,9,10).

Mit x = 7 soll z.B. Folgendes ausgegeben werden: 5,7,8
x=6: 5,7

Gruß,
Tom

mschaefer 2. Aug 2004 11:02

Re: SQL Abfrage
 
Moin, moin,

Zwischenfragen:

Sind die Messwerte in einer zeitlichen Abfolge?
Oder suchst Du nur die Wertmäßige Abfolge.

Oder hast einen Wert µ um den du herum nur jeweils
einen Wert suchst um diesen neu zu interpolieren ?

Grüße // Martin

motu 2. Aug 2004 11:32

Re: SQL Abfrage
 
Zitat:

Zitat von mschaefer
Sind die Messwerte in einer zeitlichen Abfolge?
Oder suchst Du nur die Wertmäßige Abfolge.

Wertmäßig.

Zitat:

Zitat von mschaefer
Oder hast einen Wert µ um den du herum nur jeweils
einen Wert suchst um diesen neu zu interpolieren ?

ich suche die umliegenden, um diese einfach anzeigen zu lassen.

Inzwischen habe ich mein Ziel allein durch Anpassung des SQL-Statements erreicht. Mal sehen, was als nächstes kommt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:59 Uhr.
Seite 2 von 3     12 3      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz