Avatar billede danieldahl Nybegynder
04. juli 2014 - 10:21 Der er 9 kommentarer og
1 løsning

Insætte den forrrige værdi

Hej,

Jeg har en tabel der ser nogenlunde sådan her ud:

Valuta  Rate  Dato        RowNumber
---------------------------------------
EUR      7.5  2014-10-13      1
EUR      7.6  2014-10-14      2
EUR      7.8  2014-10-15      3
EUR            2014-10-16      4
EUR      7.4  2014-10-17      5

Som det ses under Rate, så mangler der ved nogle datoer en valutakurs og jeg vil derfor gerne have at den tager den forrige værdi, sådan at der kommer til at stå 7.8 i den tomme værdi. Jeg kan bare ikke få den til at gøre det on the fly.
Håber i kan hjælpe
Avatar billede arne_v Ekspert
04. juli 2014 - 15:06 #1
Det vil vaere langt nemmere at goere i din applikation end i SQL.

Hvad programmerer du i?
Avatar billede Slettet bruger
14. juli 2014 - 21:23 #2
Måske noget i den her retning!~)

Select dt.Valuta, case dt.Rate is null then dt2.Rate else dt.Rate end as Rate, dt.Dato, dt.RowNumber
from DinTabel dt
left join DinTabel dt2
on dateadd(d,-1,dt.Dato) = dt2.Dato
Avatar billede arne_v Ekspert
20. juli 2014 - 05:04 #3
den loeser opgaven som beskrevet

men jeg er skeptisk overfor loesningen p.g.a. hvad der sker ved manglende datoer og manglende vaerdier flere daga i traek
Avatar billede danieldahl Nybegynder
21. juli 2014 - 08:05 #4
Det er korrekt som arne_v skriver, så løser det den konkrete opgave, men hvis der er mere end 2 dage imellem hver rate, så fejler den (læs: rate = Null).
Er det ikke muligt at lave en subselect eller noget i den retning?
Avatar billede kjulius Novice
25. juli 2014 - 17:05 #5
Prøv med:

SELECT t1.Valuta, COALESCE(t1.Rate, t2.Rate) AS Rate, t1.Dato, t1.RowNumber
FROM #t AS t1
LEFT JOIN #t AS t2
    ON t1.Valuta=t2.Valuta
    AND t2.Rate IS NOT NULL
    AND t2.Dato = (
        SELECT MAX(Dato)
        FROM #t
        WHERE Valuta=t1.Valuta
        AND Dato < t1.Dato
        AND Rate IS NOT NULL)


Med disse testdata:
Valuta Rate                                    Dato                    RowNumber
------ --------------------------------------- ----------------------- -----------
EUR    7.5                                    2014-10-13 00:00:00.000 1
EUR    7.6                                    2014-10-14 00:00:00.000 2
EUR    7.8                                    2014-10-15 00:00:00.000 3
EUR    NULL                                    2014-10-16 00:00:00.000 4
EUR    7.4                                    2014-10-17 00:00:00.000 5
EUR    NULL                                    2014-10-18 00:00:00.000 6
EUR    NULL                                    2014-10-19 00:00:00.000 7
EUR    8.4                                    2014-10-20 00:00:00.000 8


giver forespørgslen dette resultatsæt:
Valuta Rate                                    Dato                    RowNumber
------ --------------------------------------- ----------------------- -----------
EUR    7.5                                    2014-10-13 00:00:00.000 1
EUR    7.6                                    2014-10-14 00:00:00.000 2
EUR    7.8                                    2014-10-15 00:00:00.000 3
EUR    NULL                                    2014-10-16 00:00:00.000 4
EUR    7.4                                    2014-10-17 00:00:00.000 5
EUR    NULL                                    2014-10-18 00:00:00.000 6
EUR    NULL                                    2014-10-19 00:00:00.000 7
EUR    8.4                                    2014-10-20 00:00:00.000 8

Det ser umiddelbart ud til at være rigtigt, som jeg ser det. Men du må selv teste det mere grundigt... :-)
Avatar billede kjulius Novice
25. juli 2014 - 17:08 #6
Arggh. Jeg skulle have brugt preview!

Resultatsættet skulle have været:
Valuta Rate                                    Dato                    RowNumber
------ --------------------------------------- ----------------------- -----------
EUR    7.5                                    2014-10-13 00:00:00.000 1
EUR    7.6                                    2014-10-14 00:00:00.000 2
EUR    7.8                                    2014-10-15 00:00:00.000 3
EUR    7.8                                    2014-10-16 00:00:00.000 4
EUR    7.4                                    2014-10-17 00:00:00.000 5
EUR    7.4                                    2014-10-18 00:00:00.000 6
EUR    7.4                                    2014-10-19 00:00:00.000 7
EUR    8.4                                    2014-10-20 00:00:00.000 8

Copy/paste fejl... (suk!)
Avatar billede danieldahl Nybegynder
28. juli 2014 - 08:09 #7
Det virker som en drøm, mange tak for det :)
Avatar billede danieldahl Nybegynder
28. juli 2014 - 08:12 #8
t
Avatar billede danieldahl Nybegynder
28. juli 2014 - 08:15 #9
Så fik jeg givet point'ne til mig selv, flot. Er der en måde man kan annullere dette og gove dem til kujulius, da han virkelig fortjener dem?
Avatar billede kjulius Novice
31. juli 2014 - 15:30 #10
Tænk ikke over det. Jeg lever fint uden point. Bare glad for at kunne hjælpe...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester