Flanke von 0 zu positivem Wert mit SQL, Access 2002

bytebold

Grünschnabel
Hallo,
ich speichere eine Menge Messwerte in einer Access- Datenbank, die Daten werden alle
3min in die DB geschrieben. Auswertungen mache ich mit SQL und VB.

Jetzt mein Problem:
Es wird auch der Gasverbrauch in m3/100 der Heizung innerhalb von 3 Minuten festgestellt.
Ich habe beispielweise folgende Werte:

Uhrzeit Gasverbrauch
10:00____ 0
10:03____ 0
10:06____ 3
10:09____ 2
10:12____ 3
10:15____ 0

Ich möchte nun die Anzahl der Brennerstarts zählen. Ein Brennerstart ist erfolgt, wenn
der Gasverbrauch von 0 auf einen Wert >0 gestiegen ist.

Hat irgendjemand eine Idee oder einen Ansatzpunkt, wie man das mit SQL abfragen kann ?
Gruß, bytebold
 
Zuletzt bearbeitet:
Hi,

mit nem Counter denke ich mal geht es.

declare @cursor cursor, @wert int, @counter int, @gastwert int
set @cursor = cursor for
Select Gasverbrauch
from tTabelle1
open @cursor
while 1=1
begin
fetch from @cursor into @wert
if @@fetch_status <> 0
break
..
--hier holst du die wert und vergleichst.
--erster durchlauf nur wert holen
--ab dann vergleich @wert (aktuell) mit @gastwert (letzter wert)
--counter bei bedarf hochzählen
--zum schluss aktuellen wert speichern oder rücksetzen
..
end
 
Hab das ganze mal mit SQL Server gemacht.
Eine Tabelle mit 2 Spalten (Uhrzeit und Gaswert)

declare @cursor cursor, @currentgaswert int, @counter int, @lastgastwert int, @count int
Set @count = 0
Set @counter = 0
Set @currentgaswert = 0
Set @lastgastwert = 0
set @cursor = cursor for
Select Gasverbrauch
from Gasverbrauch
open @cursor
while 1=1
begin

fetch from @cursor into @currentgaswert
if @@fetch_status <> 0
break

if @count = 0
begin
Set @lastgastwert = @currentgaswert
Set @count = @count+1
end
else
begin
if @lastgastwert = 0 and @currentgaswert > 0
Set @counter = @counter+1
Set @lastgastwert = @currentgaswert
end
end

--Prüfung
Select @counter
 
Hallo,

vielen Dank für Deine Antwort und Dein Beispiel.
Allerdings stehe ich nun etwas auf dem Schlauch.
Ich kenne zwar normale SQL- Abfragen, wie

SELECT DISTINCTROW Messwerte.Datum, Sum(Messwerte.Cnt1) AS [Summe von Cnt1]
FROM Messwerte
WHERE ((([Datum]+[Uhrzeit])>#10/12/2007 19:21:0#))
GROUP BY Messwerte.datum;

allerdings weiß ich nicht, wie ich Deine Lösung umsetzen soll.
Ist das T-SQL ? Wie wird das in Access programmiert ?

Gruß, bytebold
 
Hi,

Ok mit Access müßte ich mal schauen.


Braucht du das in einem Formular oder Bericht ?

Könntest du es nicht mit VBA umsetzen.

Alle Zeilen holen und dann - wie ich - prüfen ?
Mit Fetch oder NextRow oder wie das hieß :)

mfg
Martin
 
Hallo,

ich habe die Berechnung mal mit VB gemacht, funktioniert auch:

Code:
Private Sub cmdBrennerstarts_Click()

    Dim Anzahl
    Dim Cnt1
    Dim Oldcnt1
    Dim Brennerstarts
    Dim Schleifenzähler
    
    'Prozeduraufruf Datenbank anbinden
    BindDatabase
    
    rs.Source = "Select Datum, Cnt1 from Messwerte where (Datum = #3/22/2008#) ;"
    rs.Open
    
    Oldcnt1 = 1
    Brennerstarts = 0
    Anzahl = rs.RecordCount
    fldName = "Cnt1"
    For Schleifenzähler = 1 To Anzahl
        Cnt1 = rs.Fields(fldName).Value
        If Cnt1 > 0 And Oldcnt1 = 0 Then Brennerstarts = Brennerstarts + 1
        Oldcnt1 = Cnt1
        NextDataRecord
    Next
    
    Debug.Print Brennerstarts
    
    rs.Close
    cn.Close
    
End Sub

Allerdings dachte ich, dass man das Problem nur mit SQL lösen könnte.
So habe ich mehr Aufwand, die Daten im Diagramm darzustellen.
Danke für die Bemühungen.

Gruß, bytebold
 
Wenn ich das richtig verstanden haben, dann müsste das doch so gehen:

SQL:
select count(*) from (
select * from messwerte
where gasverbrauch <> 0
AND datum = cdate('31.12.2007')
)

Gib die Anzahl der Datensätze zurück, die am 31.12.2007 einen Wert größer 0 haben.

Oder hab ich da was falsch verstanden?
 
Hi,

danke für den Tip, ist aber nicht das, was ich brauche.

In der Spalte Gasverbrauch stehen die Werte, die innerhalb 3 Minuten gemessen wurden.
Ist dort ein Wert > 0 drin, so wurde Gas verbraucht, also brannte der Brenner.
Steht dort eine 0 drin, war der Brenner aus, also kein Gasverbrauch.
Ich möchte die Anzahl der Brennerstarts pro Tag zählen, d.h. die Anzahl der Übergänge,
wo vorher eine 0 in der Spalte stand und anschließend ein Wert > 0.

Dein Vorschlag gibt mir die Anzahl zurück, wo ein Wert >0 in Spalte Gasverbrauch eingetragen ist,
nicht aber die ich nenne sie mal ">1- Perioden".

Gruß, bytebold
 
Hast du in deiner Tabelle einen durchnummerierenden Primärschlüssel?

Dann könntest du nämlich so abfragen:

SQL:
select *
from messwerte w1, messwerte w2
where w1.id + 1 = w2.id
AND w1.wert = 0 
AND w2.wert <> 0

Das müsste dir all die Punkte geben, an denen ein Sprung von 0 auf irgendwas stattfindet.
 
Hi,

das sieht schon mal nicht schlecht aus, allerdings will Access einen Wert für w1 und w2 von mir haben und macht dies daraus:
Code:
SELECT *
FROM messwerte AS w1, messwerte AS w2
WHERE w1.id+1=w2.id And w1.wert=0 And w2.wert<>0;

Einen durchnummerierenden Primärschlüssel gibt es.
Was ist denn w1 und w2, kannst Du mir eine kurze Erklärung geben ?

Gruß, bytebold
 

Neue Beiträge

Zurück