Waarden opzoeken in huidige tabel

Status
Niet open voor verdere reacties.

raffie77

Gebruiker
Lid geworden
7 dec 2007
Berichten
8
Dag mensen
ik heb een vraag: ik houd de meterstanden bij zie een greep uit mijn database:

Datum Gas Electra Water
15-12-2009 45434 64888 285
15-11-2009 45307 64553 281
15-10-2009 45188 64224 275
15-9-2009 45170 64050 271
15-8-2009 45152 63877 267

neem als voorbeeld de eerst record van 15-12-2009
bij water staat 285
en bij de 2e record van 15-11-2009 staat bij water 281

hoe krijg ik het voormekaar om uit te rekenen hoeveel ik verbruikt heb het afgelopen maand?
moet ik dan werken met zoiets als month([datum]) of iets dergelijks?

Ralph
 
Dat is een vrij gecompliceerde vraag, vandaar dat je niet gelijk antwoord kreeg... Maar als je van de gevens uit je voorbeeld een tabel maakt die je Meterstanden noemt, dan kun je met onderstaande query volgens mij het verbruik prima uitrekenen:

SELECT Meterstanden.Datum, Meterstanden.Water, (SELECT TOP 1 Water FROM Meterstanden AS T1 WHERE T1.Datum < Meterstanden.Datum ORDER BY T1.Datum DESC ) AS VorigWater, IIf([VorigWater] Is Null,0,[water]-[VorigWater]) AS [Verbruik Water], Meterstanden.Gas, (SELECT TOP 1 Gas FROM Meterstanden AS T1 WHERE T1.Datum < Meterstanden.Datum ORDER BY T1.Datum DESC ) AS VorigGas, IIf([VorigGas] Is Null,0,[Gas]-[VorigGas]) AS [Verbruik Gas]
FROM Meterstanden
GROUP BY Meterstanden.Datum, Meterstanden.Water, Meterstanden.Gas
ORDER BY Meterstanden.Datum;

Dit voorbeeld rekent de verschillen uit voor Water en Gas. Waarschijnlijk kun je hem zelf wel uitbreiden voor electra...
 
Dat is een vrij gecompliceerde vraag, vandaar dat je niet gelijk antwoord kreeg... Maar als je van de gevens uit je voorbeeld een tabel maakt die je Meterstanden noemt, dan kun je met onderstaande query volgens mij het verbruik prima uitrekenen:



Dit voorbeeld rekent de verschillen uit voor Water en Gas. Waarschijnlijk kun je hem zelf wel uitbreiden voor electra...

dat is em, ontzettend bedankt voor je snelle reactie.
maar wat houd de T1 in eigenlijk.
want dit werkt wel, maar ik wil het verschil straks ook gaan vergelijken met de desbetreffende maand van vorig jaar (hoeveel gas heb ik vorig jaar dec verbruikt?)
 

Bijlagen

Wat er gebeurt is dat je een tijdelijke kopie maakt van de tabel met de gegevens. In dit geval is dat de tabel Meterstanden. Je gebruikt dus a.h.w. twee keer dezelfde tabel, alleen gebruik je uit de kopie db andere gegevens dan uit de hoofdtabel. Vandaar dat de kopie tabel een andere naam moet hebben, in dit voorbeeld T1. Die naam zie je als je de Eigenschappen van de tabel bekijkt; daar staat nu dus T1.
Je mag uiteraard elke naam gebruiken die je wilt, maar om de query niet te onoverzichtelijk te maken, wordt vaak dus een korte naam genomen.
 
Ik had de andere vraag nog niet gezien, maar bij nadere bestudering uiteraard wel. Voor Jaaroverzichten heb je een iets andere constructie nodig. De formules die gebruikt worden voor de maandtellingen maken gebruik van een datumveld. Dat werkt uiteraard dan niet als je een jaaroverzicht gaat maken.
Voor die situatie heb je dan ook een extra query nodig (tenzij iemand het kan zonder?), en die heb ik dan ook voor je gemaakt. Het is een relatief simpele; omdat je een tabel hebt met oplopende meterstanden hoef je geen berekeningen uit te voeren, je kunt gewoon de hoogste waarde per jaar gebruiken. De tussenquery doet ook niet meer dan dat: hij gebruikt de functie Totalen om te groeperen op Year([datum]), en pakt vervolgens met MAX de hoogste waarden: Max([Water] As Water bijvoorbeeld.
Vervolgens gebruik je deze query weer in een Meterstanden overzicht, waarbij je zelfs de oorspronkelijke query kunt gebruiken, en die kunt aanpassen.

De verschillen zijn als volgt:
In de query op Maandbasis gebruik je het volgende veld:
VorigWater: (SELECT TOP 1 Water FROM Meterstanden AS T1 WHERE T1.Datum < Meterstanden.Datum ORDER BY T1.Datum DESC )

Dat wordt in de query voor de Jaarcijfers:
VorigWater: (SELECT TOP 1 Water FROM qJaartotalen AS T1 WHERE T1.Jaar < qJaartotalen.Jaar ORDER BY T1.Jaar DESC )

Simpel, als je het weet...
het idee is weer hetzelfde: je gebruikt één veld als groepeerveld (Jaar in de tweede) en je gaat de voorlaatste van Ti.Jaar opzoeken t.o.v. qJaartotalen.Jaar .
 

Bijlagen

ahh ik zie het,
maar wat ik wil is dit:
voorbeeld:
op 15-06-2008 was het verbruik van gas 20
op 15-06-2009 was het verbruik van gas 31

dus 2009 was 11 meer
ik wil per maand kijken hoe dat vorig jaar was.
ik heb me even verdiept in dlookup
kan ik niet een dlookup gebruiken?
ik heb een veld jaar en veld maand aangemaakt year:([datum])
is er dan geen dlookup van huidige maand - 12 of iets dergelijks?
dan kan ik ook zeggen van vergelijk deze maand met die van de vorige in een dlookup syntax
 
opgelost,

ik heb de dlookup methode gebruikt zie bijlage
nu nog even een rapportje maken
ik was iets bekender met de dlookup methode
zie bijlage

ieder geval bedankt voor de moeite


Ralph
 

Bijlagen

Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan