berekeningen met het resultaat van het vorige record

Status
Niet open voor verdere reacties.

Nicole1

Gebruiker
Lid geworden
1 apr 2011
Berichten
6
Zie onderstaande query:

insert into EWMA (rijnummer
, EWMA
, last_modified)

select T2.RN1
, (Case when T2.RN1 = 1
Then 20
Else
0.2*T2.counter_value + EWMA.EWMA*.08
END )
, T2.last_modified

from Hulp_tabel_EWMA AS T2

left Join EWMA
ON EWMA.rijnummer + 1 = T2.RN1


Kan iemand mij vertellen waarom dit niet werkt en hoe ik het zou kunnen oplossen.
 
Welke foutmelding krijg je? En doet de losse select het zonder de insert het wel?
 
Ik krijg geen foutmeldingen maar het resultaat is niet goed.

Ik heb even hulp tabellen aangemaakt.

Het geheel ziet er nu zo uit:

Create table EWMA

( rijnummer int
, EWMA decimal
, last_modified datetime
)



CREATE TABLE T1 (RN1 INT, Counter_value INT)

INSERT INTO T1 VALUES (1, 30)
INSERT INTO T1 VALUES (2, 25)
INSERT INTO T1 VALUES (3, 25)
INSERT INTO T1 VALUES (4, 28)

insert into EWMA (rijnummer ,EWMA)


select T1.RN1
, (Case when T1.RN1 = 1
Then 20
Else
0.2*T1.counter_value + T2.EWMA*.08
END )

from T1

left Join EWMA as T2
ON T2.rijnummer + 1 = T1.RN1



select * from EWMA


Resultaten zijn nu:
rijnummer EWMA Last_modified
1 20 Null
2 Null Null
3 Null Null
4 Null Null

het resultaat zou moeten zijn:

1 20 Null
2 21 Null
3 21.8 Null
4 23.04 Null
 
Dat komt door dit sommetje:
Code:
0.2*T1.counter_value + T2.EWMA*.08

Het veld T2.EWMA is NULL omdat de tabel EWMA nog geen informatie bevat. Dat maak het sommetje: 0.2 * 25 + NULL * .08. Het resultaat van deze som is NULL. Welke getallen had je verwacht op de plek van T1.counter_value en T2.EWMA?
 
De tabel T1 is een tabel waar reeds waarden instaan, en dagelijks waarden bij komen. Voor de EWMA tabel is het de bedoeling dat hij de EWMA waarde berekend wordt.
zoals in het bovenstaande voorbeeld:
Tabel T1:
RN1 Counter_value
1 30 (X1)
2 25 (X2)
3 25 (x3)
4 28 (X4)


Tabel EWMA:
Rijnummer EWMA
1 20 (EWMA1) Case when T1.RN1 = 1 Then 20
2 0,2 * 25 + 0,8 * 20 (=21 EWMA2) 0,2 * X2 + 0,8 * EWMA1
3 0.2 * 25 + 0,8 * 21 (=21,8 EWMA3) 0,2 * X3 + 0,8 * EWMA2
4 0.2 * 28 + 0,8 * 21,8 (=23,04 EWMA4) 0,2 * X4 + 0,8 * EWMA3

In de EWMA berekening gebruik ik dus de uitkomst van de EWMA van de vorige regel.
 
Laatst bewerkt:
In je huidige voorbeeld worden alle regels in één keer toegevoegd aan de tabel. Op het moment dat bijvoorbeeld regel 4 wordt toegevoegd is het resultaat regel 3 nog niet beschikbaar en kun je deze niet in de berekening van 4 gebruiken. Wat je kunt doen is een loop creëren. Dan worden ze regel voor regel toegevoegd en kun je het resultaat van de vorige regel wel gebruiken. Op de database kan dat met een stored procedure, of als je met een programmeertaal zoals php de database benaderd kan het daar mee.

Een eenvoudigere oplossing weet ik zo niet, wellicht iemand anders.
 
Ik zal het proberen via een stored procedure. In ieder geval bedankt voor je hulp.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan