Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

Finde nächst größeren Wert

Dieses Thema im Forum "Microsoft SQL Server" wurde erstellt von Mario1234567890, 26 Juli 2012.

  1. Mario1234567890

    Mario1234567890 Benutzer

    Hallo zusammen,
    Ich krieg´s einfach nicht zusammen.
    Sonst stelle ich mich nicht so blöd an ...........

    Ich hab folgendes Problem:
    Ich hab eine große Tourentabelle, ich welcher Fahrten aufgezeichnet werden.
    Eine Fahrt / Tour = 1 Zeile
    Fahrzeugen werden an Kontrollpunkten einer Strecke erfasst und die Kontrollpunktdaten werden einzeln an den Server gesendet.
    Die Fahrten werden aus den Kontrollpunktdaten auf Grund von Subtabellen (Regeln) zusammengestellt. (Agent Jobs)
    Ich möchte jetzt am Ende einer Fahrt (am Ende der Zeile) vermerken, was die nächste Fahrt ist

    Jedes Fahrzeug zählt eine TransaktionsSequenznummer hoch (TSN)
    Jedes Fahrzeug hat eine Nummer OBU
    TSNEOT = die höchste TSN einer Zeile

    Ich habe folgende Daten
    OBU, TSN01, TSN02-10, TSNEOT.

    Ich würde jetzt gerne nach TSNEOT noch NEXTTSN berechnen.
    NEXTTSN sollte der min(TSN01) für eine OBU sein, der größer ist als der aktuelle TSNEOT

    Kann mir jemand mit dem skript behilflich sein?

    mario
     
  2. Mario1234567890

    Mario1234567890 Benutzer

    UPDATE Tours SET
    --PSEUDOCODE SET NEXTTSN = minimale(TSN01) dieser OBU systemweit, welche größer ist als die NEXTTSN dieser zeile
    NEXTTSN = (SELECT MIN(DISTINCT TSN01)AS TSN01 from Tours WHERE TSN01 > NEXTTSN group by TSN01)
    WHERE NEXTTSN is null

    aber das funktioniert so nicht......krmpf
     
  3. Mario1234567890

    Mario1234567890 Benutzer

    hier eine beispiel tabelle

    obu01 TSN01 tsneot NEXTTSN
    218130341 965 966 NULL (SOLL 968)
    218130341 968 969 NULL
    218130341 972 973 NULL
    218130341 975 976 NULL
    218130341 978 979 NULL
    218130341 981 982 NULL
    218130341 984 985 NULL
    218130341 987 988 NULL
    218130341 990 991 NULL
     
  4. ukulele

    ukulele Datenbank-Guru

    Das widerspricht sich irgendwie. Wenn TSNEOT die höchste TSN01 ist, die eine obu01 hat, dann kann es keine TSN01 geben, die größer ist.
     
  5. Mario1234567890

    Mario1234567890 Benutzer

    Es gibt pro Zeile TSN01, TSN02,TSN03-10. TSNEOT ist die höchste TSN einer Zeile
    In NEXTTSN sollte der nächste Wert von TSN01 einer der folgenden Zeilen stehen (nächster TSN01 für eine OBU)

    => siehe Tabelle oben - in der Zeile TSN01 = 965, TSNEOT = 966 sollte für NEXTTSN der Wert 968 berechnet werden
    Das ganze dient der Rundenzeitberechnung von Fahrzeugen in einem Transportumlauf
     
  6. Mario1234567890

    Mario1234567890 Benutzer

    Wenn man ausgeschlafen ist, funktioniert alles wesentlich besser:
    So funkt´s,
     
  7. ukulele

    ukulele Datenbank-Guru

    Als Select müsste das hier erfolgreich sein:

    Code:
    SELECT    t1.*,
            (    SELECT    min(t2.TSN01)
                FROM    tabelle t2
                WHERE    t2.obu01 = t1.obu01
                AND        t2.TSN01 > t1.tsneot ) AS NEXTTSN
    FROM    tabelle t1
    WHERE    t1.obu01 = 218130341
    Ich weiss nicht genau, ob man im Update diesen Subselect fahren kann, das müsste man mal ausprobieren. Ansonsten muss man es per Schleife machen.
     
  8. Mario1234567890

    Mario1234567890 Benutzer

    Vielen Dank für die Unterstützung:
    Problem gelöst
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden