2016-06-01 27 views
1
LAG (RegisterReading,1) OVER (PARTITION BY Mpancore ORDER BY meterserialnumber, MeterRegisterId) as LagFunc 

Jeder bitte helfen. DankLag Funktion bringt die Zufallszahl für die erste obere Reihe zurück

Hallo an alle, ich habe den Bericht mit allen Schlüsseln aktualisiert dem Bericht hinzugefügt, ich habe es gegen die met_reg_read und mpan als Kombination Partition verwendet, aber es funktioniert nicht die vorherige für bestimmte diejenigen zu bekommen scheinen wie in der lag func und lag test.

lagtestlooks wie dies

LAG (d.RegisterReading,1,0) over (partition by Mpan, met_reg_read order by d.met_reg_read) 

lagfunc ohne default 0

Link zu neuer Ausgabe

Antwort

6

Dies ist kein Zufall Wert. Es ist ein Wert, der irgendwo mit dem gleichen Mpancore Wert erscheint. In diesem Fall ist es der letzte Wert.

Das Problem, dem Sie gegenüberstehen, ist, dass die Klausel order by zwei Schlüssel hat und diese Schlüssel doppelte Werte haben. Daher ist die Reihenfolge der Schlüssel mit dem gleichen Wert beliebig oder unbestimmt (aber nicht zufällig, die andere Auswirkungen hat).

Ich bin mir nicht sicher, was Sie tun möchten, aber ich empfehle dringend eine einzigartige Reihe von Schlüsseln (so ist die Art stabil). Ich glaube, Sie können dies tun, indem RegisterReading einschließlich:

LAG(RegisterReading, 1) OVER (PARTITION BY Mpancore 
           ORDER BY meterserialnumber, MeterRegisterId, ReadingDateAndTime 
          ) as LagFunc 

Diese noch nicht perfekt ist, weil es noch NULL Werte mit Dubletten sind.

+0

Danke Gordon, das hat für den bestimmten PMancore funktioniert, aber wenn ich es gegen ein anderes Beispiel starte, bekomme ich das gleiche Problem wieder. Gibt es einen Weg um dies zu erreichen, indem ich die Schlüssel, die ich im Beispiel angegeben habe, benutze, damit es für jeden PMancore funktioniert? Danke – abs786123

+1

@ abs786123 - Deterministische Ergebnisse erfordern einen Satz von Feldern, die jede Zeile * eindeutig * identifizieren können. Diese Felder können dann in "PARTITION BY" und "ORDER BY" verwendet werden. In Ihren Beispieldaten ist das nicht möglich. Selbst wenn Sie alle 5 Felder angeben, gibt es mehrere Zeilen mit denselben Werten. Das Beste, was du bekommen wirst * (für die Daten, die du gezeigt hast) * ist etwas wie 'PARTITION BY MpanCore, MeterIDSerialNumber, MeterRegisterID ORDER BY ReadDateAndTime, RegisterReading'. Wenn Sie mehr Felder verwenden möchten oder andere Ergebnisse wünschen, empfehle ich Ihnen, Ihre Frage mit weiteren Details zu aktualisieren. – MatBailie

+0

Hallo Ich habe die Ergebnisse aktualisiert, um alle eindeutigen Schlüssel zu bringen, es gibt immer noch das Problem, dass es mit 557 erscheint, wenn dies nicht im Registerstand war. Ich habe alle möglichen Kombinationen von Partition und Reihenfolge ausprobiert, aber es kommt immer noch dazu, etwas anderes als das zu zeigen. Ich habe den eindeutigen Schlüssel met_reg_read benutzt, der dachte, dass er es gelöst hätte, aber nicht. Jede Art von Hilfe wird Ihnen dankbar sein. – abs786123