Hi Leute, ich sollte eine Datenbank (Messwerte verschiedener Sensoren) mit folgender Struktur: Zeit | SensorNo | Wert Beispiele für Daten: 12:00| 1 | 22.4 12:00| 2 | 2.4 12:00| 3 | 0.6 12:01| 1 | 21.4 12:01| 2 | 2.3 12:01| 3 | 0.5 12:02| 1 | 20.4 12:02| 2 | 2.2 12:02| 3 | 0.4 umwandeln in eine Tabelle (Text-Datei) mit folgender Struktur Zeit | Sensor 1 | Sensor 2 | Sensor 3 12:00 | 22.4 | 2.4 | 0.6 12:01 | 21.4 | 2.3 | 0.5 12:02 | 20.4 | 2.4 | 0.4 Wie man sieht werden 3 Werte je Messzeitpunkt erfasst, die dann nebeneinender stehen sollten. Ist es irgendwie möglich das per SQL zu erledigen. Problem ist, daß es sich um große Datenmengen handelt und folglich die Funktion möglichst schnell sein sollte. Denkbar wäre als Hilfe auch eine Zweite Tabelle, in der ich zusätzlich nur die Erfassungszeitpunkte gespeichert werden. Hat jemand eine Idee ? Gruß Frank
Versuch mal folgendes: SELECT a.Zeit AS Zeit,a.Wert AS Sensor1,b.Wert AS Sensor2,c.Wert AS Sensor3 FROM Tabelle a, Tabelle b, Tabelle c WHERE a.Zeit = b.Zeit AND a.Zeit = c.Zeit. Hope it helps
Hallo Jens, kapiere ich nicht, bin auch nicht gerade Mister SQL. Kannst du mir erläutern, was da genau dabei passiert ? Gruß Frank
Ich noch mal, die Werte der verschienenen Sensoren je Messzeitpunkt sollen nicht in die Spalten einer bereits bestehenden Tabelle übernommen werden. Das Problem ist, dass sich die Anzahl der Sensoren varibel ist und deshalb eine Ausgabe-Tabelle (evt. Virtuelle Tabelle o.ä. wenn es so was gibt) mit passender Spaltenzahl erst generiert werden muss. Die Anzahl Sensoren kann zwischen 1 und 200 liegen (meist ca.15). Deshalb wäre es wahrscheinlich ein Zeitfresser, ständig mit einer Tabelle zu hantieren, bei der nur ein paar Prozent der Spalten wirklich benutzt werden. Gruß Frank
0. welches Datenbanksystem wird verwendet? 1. kommen alle Messwerte im gleichen Datagramm? 2. 200 Joins gegen die "Zeitachse" verbruzzeln auch viel Zeit - dann leiber 200 Spalten ;-) 3. Wieviele Messwerte sollen denn gespeichert werden - einer je Minute? ja - ich hantiere jeden Tag mit SQL Richtiger und Besser - wenn oben nur einer der Werte fehlt fällt die ganze Zeile aus - besser Zeitchse bilden, Outer-Join verwende und über Index auf Zeit und Sensor nachdenken SELECT z.Zeit , a.Wert AS Sensor1, b.Wert AS Sensor2, c.Wert AS Sensor3 FROM ( select distinct zeit from tabelle ) z , Tabelle a, Tabelle b, Tabelle c WHERE 1=1 /*Join*/ and z.Zeit = a.Zeit (+) and z.Zeit = b.zeit (+) and z.Zeit = c.zeit (+) /*Filter*/ and a.sensor = 1 and b.sensor = 2 and c.sensor = 3
>> 0. welches Datenbanksystem wird verwendet? Habe zuerst paradox verwendet, bin jetzt aber auf MySQL >> 1. kommen alle Messwerte im gleichen Datagramm? Ja, si kommen alle in der einen Tabelle und unterscheiden sich durch die SensorNo >> 3. Wieviele Messwerte sollen denn gespeichert werden - einer je >> Minute? Das ist nicht genau definiert und muss den Anforderungen jeweils angepasst werden (1Minute - 1 Stunde). Es laufen allerdings Sensoren verschiedener Messpunkte mit jeweils bis zu 200 Sensoren ein. Es wäre also noch eine Spalte "MessPunktNo" (neben Zeit | SensorNo | Wert) vorhanden, was allerdings für das Problem hier nicht relevant ist. Zudem werden die Daten über Jahre hinweg gespeichert. Es wird also schon eine kleine Menge Daten. >>ja - ich hantiere jeden Tag mit SQL ich leider leider nicht. Habe noch mal nachgekoogelt :-) - Wäre da nicht ein VIEW das geeignete Instrument ? Gruß Frank
0.MYSQL - bin Oraclefixiert - würde mal Postgres versuchen... 1. Datagramm - meinte nicht Tabelle sondern sind es 200 einzelinserts oder ein Insert für 200 Meßwerte ... da macht auch manchmal einen Unterschied aus View - nein nicht unbedingt besser - zum Zusammenwurschteln schon aber wie lang kann auf das Ergebniss gewartet werden .... wie arbeite ne View: - besorgen alles Daten (by mySQL wird eventuelle dann die Datentabelle 200mal gelesen - jeweils gefiltert) - joinen der Daten - wegschmeißen der nicht benötigten Daten falls nur ein Tag gebraucht wird... Aber das kanst DU doch gut prübieren - kannst doch einfach mal die Tabelle Testweise befüllen... P.S. sollte nicht auch Tag, Monat u. Jahr mit gespeichert werden ;-)
>> 0.MYSQL - bin Oraclefixiert - würde mal Postgres versuchen... OK werde ich anschauen - Null Ahnung von Postgres also wirds etwas dauern. >> 1. Datagramm - meinte nicht Tabelle sondern sind es 200 >> einzelinserts oder ein Insert für 200 Meßwerte ... da macht auch >> manchmal einen Unterschied aus Ein Insert erledigt alle Sensorwerte eines Messpunkts. >> View - nein nicht unbedingt besser - zum Zusammenwurschteln schon >> aber wie lang kann auf das Ergebniss gewartet werden .... Es soll eben so fix wie möglich sein (Web-Interface). >> P.S. sollte P.S. sollte nicht auch Tag, Monat u. Jahr mit >> gespeichert werden ;-) JoJo, das ist natürlich alles und noch mehr mit drin. Es sollte ja nur ein Beispiel zur Veranschaulichung sein.
Um wieviel Messpunkte handelt es sich denn und in welchen Abständen soll aktualisiert werden? Wenns ein Web-Interface sein soll, könntest du doch beispielsweise ASP.NET verwenden. Ansatz: Die Webanwendung holt sich von Zeit zu Zeit die Daten aus der DB (von mir aus alle paar Sekunden - kommt eben auf die Anzahl drauf an). Sie wirft diese Daten nun in ein normales Array und du bist eigentlich fertig. Du kannst ja über die einzelnen Indizes umgekehrt auf das Array zugreifen. Du vertauscht dafür einfach den Spalten mit dem Zeilenindex und gut ists. Basierend auf diesen Daten, könnte die Anwendung noch eine Grafik generieren und dieses ganze Zeugs dann ausgeben. Wäre imho nicht allzu schwer zu lösen. Spalten/Zeilen vertauschen bei mySQL stelle ich mir recht aufwendig vor. Grüße aus Wien Tom
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.