![]() |
Datenbank: firebird • Version: 2.5 • Zugriff über: Delphi XE
Vorherigen Wert aus einer Tabelle bestimmen
Hallo zusammen
Angenommen ich hab eine Tabelle mit Zahlenwerten.
Weiß jemand einen Algorithmus, wie ich den vorherigen Wert mit select bestimmen kann? Bsp: von Wert 105 -> mit select 97 oder von Wert 110 -> mit select 105 ... etc Ich hätte an ein Select mit Schleife gedacht, da ich relativ neu in SQL bin, bin ich mir unsicher ob das überhaupt funktioniert. |
AW: Vorherigen Wert aus einer Tabelle bestimmen
Wenn die Tabelle eine ID als Primärschlüssel hat:
SQL-Code:
select
first 1 from <Tabelle> where id < :id order by id desc; |
AW: Vorherigen Wert aus einer Tabelle bestimmen
Ich vermute mal, daß es hier um die nach aufsteigenden Werten sortierte Tabelle handelt und du den nächst-kleineren Wert haben willst?
Nehmen wir an, die Tabelle heißt "TabValues", das Feld "FldValue" und der Parameter für den aktuellen Wert heißt "CurValue". In dem Fall sollte ein
SQL-Code:
SELECT MAX(FldValue)
FROM TabValues WHERE FldValue < :CurValue |
AW: Vorherigen Wert aus einer Tabelle bestimmen
Hallo,
Zitat:
MKinzler benutzt hier gleich mehrere spezielle SQL-Konstrukte. order by id desc; Sortiere absteigend (descending), als die größten zuerst Ergebnis: 110 105 97 88 74 where id < :id nur die, die kleiner als id sind id=105 Ergebnis: 97 88 74 first 1 nur den ersten Wert zurückgeben Ergebnis: 97 dada Das first 1 hättest du auch weglassen können, weil der erste Eintrag ja die 97 ist, aber warum 3 Records übers Netz schubsen, wenn Du weißt, dass Du nur den ersten brauchst. |
AW: Vorherigen Wert aus einer Tabelle bestimmen
@uwe: Ist zwar im Beispiel zwar so, in der Praxis aber selten.
@Heiko: Ich dachte eine ID unabhängig von den Werten. Und
SQL-Code:
bewirkt, dass nur ein datensatz über das Netz geht.
First 1
|
AW: Vorherigen Wert aus einer Tabelle bestimmen
Zitat:
|
AW: Vorherigen Wert aus einer Tabelle bestimmen
Zitat:
Was man abfragen kann ist der Datensatz der als letzter vor einem anderen erfasst worden ist, wenn ein etsprechendes Datumfeld/timestamp existiert. Oder den direkten Vorgänger oder Nachfolger eines datensatzes wenn auf oder absteigend nach einem bestimmten Feldinhalt sortiert wird. Gruß K-H |
AW: Vorherigen Wert aus einer Tabelle bestimmen
Zitat:
Es mag vielleicht haarspalterisch klingen und man meint die Frage ist doch klar, Werte aus der Zeile "davor".. Naja, kann sein, könnte aber auch anders gemeint sein. Du bist natürlich nicht der einzige, der sowas gebrauchen könnte und wenn Du Deine DB von 2.5 auf Version 3 hochziehst, dann bekommst Du, was Du willst: ![]() Wenn Du "Anfänger" bist, ist die Version Deiner DB ja wahrscheinlich eher Zufall oder Resultat einer Paketinstallation als Absicht. Mit den Funktionen aus dem Link kann man nette Sachen machen. Es ist zwar, wie man z.B. an firebird sieht, nicht in jeder Db möglich, aber wird mehr und mehr Standard. Damit kannst Du dann Zugriffe, die man aus Spreadsheetfunktionen kennt, auch in einer DB verwenden, die im "Normalbetrieb" einfach mit unsortierten Mengen arbeitet. Wie man an den Beispielen im Link sieht, geht es allerdings nicht nur um ein stumpfes "Order by", das gibt's ja schon. Die Window Functions erlauben der DB auch eine wesentlich bessere Optimierung der Abfrage, die Abfragen sind viel schneller, als die Workarounds, die bis vor Kurzem bspw. noch in fb oder mysql nötig waren. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:05 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz