AGB  ·  Datenschutz  ·  Impressum  







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

[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.858 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
679 Beiträge
 
Delphi 12 Athens
 
#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
Antwort Antwort
Seite 2 von 2     12   


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 08:19 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