Announcement

Collapse
No announcement yet.

nächsten Datensatz abfragen

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

  • nächsten Datensatz abfragen

    Hallo Entwickler,
    ich bitte um Hilfe bei einer Datensatzabfrage. Ich habe ein Datensatz und möchte den darauf folgenden abfragen.
    Der Datensatz ist aus einer Abfrage, die nach zwei Spalten (order by a, b) sortiert wurde, wobei in Spalte 'a' Werte mehrmals vorkommen können. Daher habe ich noch nach einem Zeitstempel (Spalte 'b') sortiert um eine eindeutige Reihenfolge zu erlangen.

    Nun möchte ich den nächsten Datensatz auslesen.
    Habe die Werte für Spalte 'a' und 'b' des bekannten Datensatzes ausgelesen und nenne sie 'wa' und 'wb'.
    Ist der Wert von Spalte 'a' einmalig, bekomme ich mit
    Code:
    select * from table where a>wa order by a, b limit 1
    den nächsten Wert. Dies ist nicht der Fall, wenn der Wert des bekannten Datensatzes 'wa' mehrmals vorkommt.

    Meine bisherigen Lösungsversuche:

    - Ich verwende kein 'limit' und frage jeden Datensatz ab, bis ich auf meinen Datensatz stoße
    Code:
    select * from table order by a, b
    . Der nächste Datensatz ist dann der gesuchte. Dies ist wahrscheinlich sehr rechenintensiv.

    - Ich frage auch die Datensätze ab, die ebenfalls den Wert 'wa' besitzen
    Code:
    select * from table where a>=wa order by a, b limit x
    . Die Anzahl der abzufragenden Datensätze (x) kann ich zuvor mit
    Code:
    select count(*) from table where a=wa
    ermitteln.

    Bestimmt gibt es eine elegantere Lösung.

    Grüße, Klaus

  • #2
    Originally posted by agrobox View Post
    ...Bestimmt gibt es eine elegantere Lösung.
    Hallo Klaus,

    eine elegantere Lösung gibt es, wenn die Tabelle einen Primärschlüssel (PK) besitzt.
    [highlight=sql]
    select * from table
    where a>=wa
    and pk != wpk
    order by a, b limit 1
    [/highlight]

    Gruß Falk
    Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

    Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

    Comment


    • #3
      Originally posted by Falk Prüfer View Post
      eine elegantere Lösung gibt es, wenn die Tabelle einen Primärschlüssel (PK) besitzt.
      Hallo Falk,

      durch pk != wpk wird doch nur der bekannte Datensatz ausgeschlossen. Warum sollte der nächste Datensatz ausgelesen werden, wenn es in Spalte 'a' mehrere Werte 'wa' gibt?

      Die Abfrage müsste lauten:
      Wenn es mehrere 'wa' in Spalte 'a' gibt, beachte erst Spalte 'b' und nimm den Datensatz der größer als 'wb' ist und gleichzeitig die Bedingung 'a=wa' erfüllt.
      Gibt das kein Ergebniss kann der Datensatz mit dem nächstgrößeren 'a' genommen werden (wie gehabt).
      Geht das in einer Abfrage oder gibt es eine Syntax in SQL die dies erledigt??

      Gruss, Klaus

      Comment


      • #4
        Originally posted by agrobox View Post
        ...Warum sollte der nächste Datensatz ausgelesen werden, wenn es in Spalte 'a' mehrere Werte 'wa' gibt?
        Darum:
        Originally posted by agrobox View Post
        ...
        - Ich verwende kein 'limit' und frage jeden Datensatz ab, bis ich auf meinen Datensatz stoße ... Der nächste Datensatz ist dann der gesuchte.
        Vielleicht solltest du erstmal Versuchen mit Logik zu beschreiben, was dein NÄCHSTER DS ist. Wenn du das mit Logik (also AND, OR, NOT, etc.) hinkriegst, dann geht es auch in SQL. Wenn es sich nur mit Wenn... Dann beschreiben läßt, dann wirst du entsprechendes PL verwenden müssen.

        Gruß Falk
        Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

        Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

        Comment

        Working...
        X