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 ??
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
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.