AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein [SQL] Datensatz + vorigen/nächsten ermitteln

[SQL] Datensatz + vorigen/nächsten ermitteln

Ein Thema von Matze · begonnen am 23. Aug 2007 · letzter Beitrag vom 24. Aug 2007
Antwort Antwort
Seite 2 von 2     12
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#11

Re: [SQL] Datensatz + vorigen/nächsten ermitteln

  Alt 24. Aug 2007, 10:46
Hi Markus,

das kommt auf die Größe der Lücke an.

An welche Größe denkst du jetzt so?

Fröhliche Grüße
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#12

Re: [SQL] Datensatz + vorigen/nächsten ermitteln

  Alt 24. Aug 2007, 10:53
Jetzt hast du den Code ja korrigiert.
Markus Kinzler
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#13

Re: [SQL] Datensatz + vorigen/nächsten ermitteln

  Alt 24. Aug 2007, 11:07
Hallo Markus,

bezog sich deine Frage tatsächlich auf "Abs(id - 5)"?

Die Fünf stammt aus dem Testlauf auf meiner Maschine und steht gewiss nicht für eine Lückengröße. Sie ist der Schlüssel, der mit seinen Nachbarn zusammen zurückgeliefert werden soll. Ich habe die Fünf analog zu meinem ersten Beitrag durch einen Parameter ersetzt. Die lustigere Frage wäre wohl gewesen: "Was wenn der gesuchte Schlüssel einmal nicht 5 ist?"

Der Abstand der Schlüssel spielt übrigens keine Rolle. Wäre er definiert, dann wäre das Problem für Matthias wohl gar nicht erst entstanden.

Freundliche Grüße
  Mit Zitat antworten Zitat
Benutzerbild von joachimd
joachimd

Registriert seit: 17. Feb 2005
Ort: Weitingen
672 Beiträge
 
Delphi 10.4 Sydney
 
#14

Re: [SQL] Datensatz + vorigen/nächsten ermitteln

  Alt 24. Aug 2007, 15:47
Zitat von marabu:
SQL-Code:
SELECT TOP 3 id
FROM tab
ORDER BY ABS(id - :id)
geht nicht! Beispiel (zB entsteht so etwas, wenn ein paar Datensätze gelöscht werden):

SQL-Code:
create table #tmp(id integer);
insert into #tmp values(1);
insert into #tmp values(5);
insert into #tmp values(6);
insert into #tmp values(7);
insert into #tmp values(10);
insert into #tmp values(15);
insert into #tmp values(20);

select top 3 id from #tmp ORDER BY ABS(id - 5);
Ergebnis: 5,6,7 -> 1,5,6 ist aber gewünscht (weil Vorgänger und Nachfolger von 5 gesucht sind)
Joachim Dürr
Joachim Dürr Softwareengineering
http://www.jd-engineering.de
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#15

Re: [SQL] Datensatz + vorigen/nächsten ermitteln

  Alt 24. Aug 2007, 18:16
Hallo Joachim,

du hast Recht, der Ansatz über die Distanz führt zu einem falschen Ergebnis, wenn die beiden Abstände zu den Nachbarn nicht gleich groß sind. Entweder der Vorgänger oder der Nachfolger müssen exakt bestimmt werden, sodass sich eine Subquery nicht vermeiden lässt:

SQL-Code:
/* MYSQL Syntax, ungetestet */

SELECT id
FROM tab
WHERE id >= (
  SELECT MAX(id)
  FROM tab
  WHERE id < :id
)
ORDER BY id
LIMIT 3
Freundliche Grüße
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:21 Uhr.
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