Finde nächst größeren Wert

Mario1234567890

Benutzer
Beiträge
7
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
 
Werbung:
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
 
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
 
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
 
Wenn man ausgeschlafen ist, funktioniert alles wesentlich besser:
So funkt´s,
UPDATE BLT_Tours2 SET
NEXTTSN = NEXTFOO

FROM
(
SELECT b.PK01, b.obu01, b.TSN01,
(
SELECT min(a.TSN01) FROM BLT_Tours2 as a WHERE a.TSN01>b.TSN01 and a.OBU01 = b.OBU01) as NEXTFOO
FROM BLT_Tours2 as b
) AS I
WHERE BLT_Tours2.PK01 = I.PK01 and BLT_Tours2.OBU01 = I.obu01 and BLT_Tours2.TSN01 = I.TSN01
 
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.
 
Werbung:
Zurück
Oben