22. juli 2011 - 20:48Der er
4 kommentarer og 1 løsning
Udregne noget i en database
Hej
Jeg kunne godt tænke mig at lave en database over mit el/vand/varm, men jeg kan ikke lige finde ud af hvordan man trækker to tal fra hinanen.
Jeg har en tabel som indholder følgende:
ID/DATO/EL/VAND/VARM/EL SIDEN SIDST/VAND SIDEN SIDST/VARM SIDEN SIDST
Så vil jeg jo gerne have den trækker det tal jeg taster ind i el, at den regner ud hvad jeg har brugt siden sidst og sætte det ind i EL SIDEN SIDST o.s.v. Jeg tror jeg skal bruge en forspørgelse, men jeg er ikke helt sikker, eller skal jeg over i VBA og skrive det der ??
Jeg har 2 felter i min form. Aflæsning er den værdi du aflæser, differencen fra sidste aflæsning gemmes i feltet forbrug. Kræver en reference til DAO:
Private Sub aflæsning_Exit(Cancel As Integer) Dim rs As DAO.Recordset Dim VARa As Double Set rs = Me.RecordsetClone rs.MoveLast VARa = "" & rs!aflæsning & "" forbrug = Me.aflæsning - VARa rs.Close End Sub
Synes godt om
Slettet bruger
22. juli 2011 - 21:55#2
Man gemmmer ikke beregnede værdier i tabel - man beregner dem efter behov i en forespørsel - derfor blot denne tabel, 'EnergiFrb', til illustration
id dato el vand varme 1 01-02-2011 2000 100 500 2 01-03-2011 2200 150 700 3 01-04-2011 2350 200 850 4 01-05-2011 2400 300 925
Vi skal ud i en selvjoin - prøv nu:
select * from EnergiFrb as b,EnergiFrb as e
Der fremkommer 16 poster - mængdeproduktet af b kryds e. 'b' for begyndelse af perioden og 'e' for enden af perioden. Prøv nu i dataark visning at sortere efter b.dato og se hvor let det er at spotte de 3 linier der har data til periode forbrug.
Kendetegnede for ovenstående data, er at id angiver en datofølge - denne redundans gør forespørgslen meget nem:
SELECT e.dato,e.el,e.vand,e.varme,e.el-b.el as elFrb,e.vand-b.vand as vandFrb,e.varme-b.varme as varmeFrb FROM EnergiFrb AS b, EnergiFrb AS e WHERE e.id=b.id+1;
Hvis nu det ikke havde været tilfældet, som hvis der blev tilføjet poster med ældre dato kan 'WHERE delen' ændres til: WHERE e.dato = (select min(dato) from EnergiFrb where dato > b.dato)
Synes godt om
Slettet bruger
22. juli 2011 - 22:46#3
Hvis man vil have første aflæsning med:
SELECT e.dato,e.el,e.vand,e.varme,e.el-b.el as elFrb,e.vand-b.vand as vandFrb,e.varme-b.varme as varmeFrb FROM EnergiFrb AS b right join EnergiFrb AS e on e.id = b.id+1
og hvis der ikke er id datofølge redundans:
SELECT e.dato, e.el, e.vand, e.varme, e.el-b.el AS elFrb, e.vand-b.vand AS vandFrb, e.varme-b.varme AS varmeFrb FROM EnergiFrb AS b RIGHT JOIN EnergiFrb AS e ON e.dato > b.dato where (e.dato = (select min(dato) from EnergiFrb where dato > b.dato)) or isnull(b.dato)
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.