Fragen: Auswertung einer Datenbank (Access) per SQL
-
hallo!
nach verweis aus diesem forum-beitrag:....poste ich nun in diesem forum hier:
das problem,
ich habe mehrere spalten welche messwerte (gleicher einheiten) von sensoren beinhalten. zusätzlich gibt es noch eine spalte mit der zeit und eine spalte mit dem datum zum zeitpunkt der messwertaufnahme.nun möchte ich den minimalwert (bzw. vom minimalwert bis zu einem definierten wert xmin, welcher zwischen minimalwert und maximalwert liegt) einer zeile (d.h. gleicher zeitpunkt) aus verschiedenen sensoren ermitteln.
also allgemein: aus einer zeile mehrerer spalten einer tabelle einen minmalwert finden.
danke
-
Das wird mit Sicherheit durch Gefummel funktionieren, aber das is sicher nicht der Sinn einer Datenbank. Bei deinem Problem hilft wohl nur Redesign deiner Datenbank um sich nichts zusammen zu frickeln.
Mein Vorschlag wäre, dass du Messwerte als Extra Tabelle rausziehst und in die Tabelle dann folgende Spalten hast:Messwert --------- - ID - Messung_ID - Wert
Messung ------- - ID - Datum
Somit kannst du
a) unendlich viele Messwerte einer Messung hinzufügen und
b) einfach über SQL die Daten auswerten:SELECT Min(Messwert.Wert), Messung.Datum FROM Messung, Messwert WHERE Messung.ID = Messwert.Messung_ID;
-
Bezug nehmend auf Deinen Start-Beitrag.
Konstruktionsfehler DB !
Zwei mögliche Ansätze:
1. Möglichkeit
den von CIN
= Redesign der DB = Änderung DB + Frontend(s)
allerdings mit z.T. anderen SpaltenTable Messung - ROWID -> immer eineindeutiger Zeilenindentifier in der Tabelle - Messung -> Bezeichnung der Messung (ID) - Zeitstempel -> Datetime mit Zeitanteil = Zeitpunkt der Messung
Table Messwerte - ROWID -> kennst Du nun schon - Messung -> siehe oben - Sensor -> ID des Sensors - Wert -> Meßwert - Einheit -> auf den sich der Wert bezieht -> Sowas kann isch ändern (z.B. durch Austausch eines Sensors)
//einfacher Select ohne Umrechnung der Werte auf Basis der Einheit SELECT MIN(MESSWERT.WERT), MESSWERT.SENSOR, MESSUNG.MESSUNG, MESSUNG.ZEITSTMPEL from MESSUNG, MESSWERT where MESSUNG.MESSUNG = MESSWERT.MESSUNG // falls nur ein bestimmter Sensor ausgewertet werden soll and MESSWERT.SENSOR = 'X'
Ich habe hier absichtlich zum Verständnis "sprechende" Spaltenbezeichungen
verwendet.2. Möglichkeit
Erzeugen einer View = Gefrickel, aber schneller umgesetzt, jedoch langsamer in der Abarbeitung als geänderte DBIch gehe davon aus, daß Deine Tabelle etwa so vorliegt
Table Messwerte ROWID MESSUNG, DATUM, ZEIT, WERTSENSOR1, WERTSENSOR2, .... WERTSENSORX
// View zur (Teil-)Normierung der Daten der Tabelle create VIEW MESSWERTEVIEW (MESSUNG,SENSOR,ZEITSTEMPEL,WERT,EINHEIT) select MESSUNG, 'SENSOR1', // da muß Deine Sensor-ID rein (im Moment wahrscheinlich Dein Spaltenname) DATUM+ZEIT, WERTSENSOR1, 'MilliWatt' // da muß Deine Einhiet rein from MESSWERTE union select MESSUNG, 'SENSOR2', DATUM+ZEIT, WERTSENSOR2, 'MilliWatt' from MESSWERTE ... union select MESSUNG, 'SENSOR-X', DATUM+ZEIT, WERTSENSORX, 'MilliWatt' from MESSWERTE
SELECT MIN(WERT), SENSOR, MESSUNG, ZEITSTMPEL, EINHEIT from MESSWERTVIEV where ZEITSTMPEL = DD.MM.YYYY HH:MM:SS //Ein Bestimmer Zeitpunkt // falls nur ein bestimmter Sensor ausgewertet werden soll and SENSOR = 'X'
Bedenke, daß jede Änderung der Stuktur Ausgangstabelle, eine Änderung der View zur Folge hat!
Bedenke weiterhin, daß es X+1 Select's sind, die ausgeführt werden müssen (X in View, 1 um View abzufragen) statt einem Select bei geänderter DB. Das kann zur Ausführungzeit merklich länger dauern als Möglcihkeit 1!
-
ich danke euch für eure ausfürhlichen antworten!
werd mir das dann mal überlegen.thx
-
und mit euren vorschlägen ist es nun auch möglich, aus messwerten von sensoren bei einem bestimmten zeitpunkt das minimum herauszuholen, wobei es notwendig ist, zu wissen woher (von welchem sensor) der minimal wert stammt.
danke
-
cin, bei deinem vorschlag für das redesign der db: es fehlt noch die zuordnung zu einem sensor.
zum grundgedanke: alle sensoren werde zu einem bestimmten zeitpunkt gleichzeitig ausgelesen, d.h. zu einem zeitpunkt gibt es zu jedem sensor einen wert.
thx
-
cin?
-
Hallo johny.
Deine letzten Aussagen/Fragen waren rein rethorisch, oder?
Andernfalls ... die Antworten auf diese Fragen stecken bereits in den Antworten von Cin und mir.