Daten aggregieren

G

Gast2

Gast
Hi,
ich schreibe Daten von verschiedenen Sensoren in bestimmten Abständen in eine Datenbanktabelle. Zusätzlich zu den Werten leg ich noch nen Timestamp dazu.

Die Tabelle sieht dann z.b. so aus:
Code:
Sensor | Wert | Timestamp
1      | 5    | 13:22:22,234
2      | 10   | 13:22:22,365
3      | 5    | 13:22:22,674
1      | 4    | 13:32:22,133
2      | 9    | 13:32:22,334
3      | 4    | 13:32:22,654
etc.

In diesem Beispiel speichere ich z.b. jede 10minuten die Daten ab. Nun möchte ich gerne alle Daten die zu einem Zeitpunkt gehören (Sekunden und Millisekunden kann ich vernachlässigen!) aufsummieren.

Als Ergebnis hätte ich also gerne folgendes:
Code:
Wert | Timestamp
20   | 13:22:22,xxx (<- ist egal welcher da steht)
17   | 13:32:22,xxx

Das ganze würd ich am liebsten direkt mit ner passenden SQL Abfrage machen, hat da jemand eine Idee, oder sollte ich lieber beim Abspeichern darauf achten dass zugehörige Werte den selben Timestamp bekommen?
 
S

SlaterB

Gast
wenn nicht passend gespeichert, dann musst du über X gruppieren,
wobei X eine Funktion ist die den Spaltenwert so umwandelt wie du es möchtest

direkt in SQL gibt es wohl nichts, was einen Timestamp umwandelt,
in MySQL gibts verschiedene Funktionen
MySQL :: MySQL 5.1 Reference Manual :: 11.7 Date and Time Functions

TIME_TO_SEC() klingt ganz passend,
allgemein kann DATE_FORMAT(date,format) wahrscheinlich einen String erstellen, der nur sekundengenau ist
 

XHelp

Top Contributor
Warum benutzt du nicht für die Zeit ein Typ, welcher auch für die Zeit gedacht ist?

Und ein anderer Hinweis: ich weiß nicht was du mit den Daten anschließend machst, aber wenn du dein Programm 24h laufen lässt, ist es wieder 13:22:22 und somit ist die Statistik unbrauchbar. (sofern alte Datensätze erhalten bleiben)
 
G

Gast2

Gast
Die Spalte Timestamp ist vom Typ Timestamp, das Datum habe ich nicht extra dazugeschrieben, wollte mich aufs wesentliche beschränken ;)

@SlaterB
Danke da werd ich mich mal durchwühlen, ist sicherlich was für meine Zwecke dabei.
Das mit dem DATE_FORMAT klingt an sich schonmal gut, aber ich denke ich bekomme dann Probleme wenn ich z.b. folgende 2 Timestamps habe:
12:59:59,998 und 13:00:00,111
Die liegen nur 113ms auseinander, würden aber durch das date format wohl nicht getroffen werden.
 

XHelp

Top Contributor
Also wenn du damit wie mit normalem Datum arbeiten kannst, dann kannst du dir doch mit >= und <= das nötige Intervall raussuchen.
 
G

Gast2

Gast
Mich interessiert aber nicht nur ein Zeitpunkt (sonst wäre es trivial :) ), ich möchte die Werte aller "gleichen" Timestamps addieren.
 
S

SlaterB

Gast
aber ich denke ich bekomme dann Probleme wenn ich z.b. folgende 2 Timestamps habe:
12:59:59,998 und 13:00:00,111
Die liegen nur 113ms auseinander, würden aber durch das date format wohl nicht getroffen werden.
tja, welches Kriterium hast du denn?
'ganz doll dicht zusammenliegend'?

was ist mit
58,1
58,2
58,3
..
59,9
00,0
00,1
..
über 10 sec?
irgendwo musst du einen Schnitt machen

falls du nicht von 0,00 bis 0,99 sondern 0,5 bis 0,49 der nächsten Sekunde runden willst,
dann bietet sich an, auf den Zeitwert vor dem Format 0.5 sec draufzuaddieren
(frag mich jetzt aber nicht wie man das in SQL schreibt ;) )
 
G

Gast2

Gast
ich speichere je nach einstellung alle 5, 10 oder 15minuten die daten ab.
Also wäre in dem fall "nahe beieinanderliegend" alles was so maximal 5-10sek auseinander liegt (in der regel sinds aber nur ein paar hundert millisekunden).

Ich kann halt nicht genau sagen wann die Daten in die Datenbank kommen, ob zur anfang einer Sekunde, mitten in einer Sekunde, oder wenns blöd läuft eben genau wenn ne Stunde umspringt ;)
 
S

SlaterB

Gast
ja, ein ärgerliches Kriterium, selbst wenn du auf ganze Minuten gruppierst kannst du genau in der Mitte eines Intervalls landen,
ich glaube nicht wirklich, dass SQL dafür Mittel hat, werde aber noch bisschen dazu nachdenken ;)
 
G

Gast2

Gast
Hm, die gute Nachricht, ich habe einen Weg gefunden das Problem zu lösen:

Code:
SELECT SUM(datensum.wert) AS sumwert, datensum.ts
FROM ( 
	SELECT wert, (SELECT MIN(d2.ts) FROM daten AS d2 WHERE d.ts BETWEEN DATE_SUB(d2.ts, INTERVAL 10 SECOND) AND DATE_ADD(d2.ts, INTERVAL 10 SECOND)) AS ts
        FROM daten AS d
     ) AS datensum
GROUP BY datensum.ts
Die schlechte: Das schaut furchtbar unperformant aus, was meint ihr? Zweites manko... ich verwende die H2 db, die kennt leider DATE_ADD und DATE_SUB nicht, wisst ihr ob ich die Rechnerei da anders lösen kann?

Die Idee dahinter:
Zu jedem Timestamp (ts) in der Datenbank suche ich mir den kleinsten ts im bereich +-10 sek. Danach kann ich alle gleichen Timestamps aufsummieren.
Der Query spuckt mir dann:
Code:
sumwert	ts
20	2010-07-09 19:39:18
17	2010-07-09 19:49:18
aus.

EDIT:
Habe einen Ersatz für H2 gefunden:
Code:
SELECT SUM(datensum.wert) AS sumwert, datensum.ts
FROM ( 
	SELECT wert, (SELECT MIN(d2.ts) FROM daten AS d2 WHERE d.ts BETWEEN DATEADD('second', -10, d2.ts) AND DATEADD('second', 10, d2.ts)) AS ts
        FROM daten AS d
     ) AS datensum
GROUP BY datensum.ts;
Code:
SUMWERT  	TS  
20	2010-07-09 19:39:18.499
17	2010-07-09 19:49:18.499
Aber falls noch jemand Verbesserungsvorschläge hat, nur raus damit :)
 
Zuletzt bearbeitet von einem Moderator:
Ähnliche Java Themen
  Titel Forum Antworten Datum
D Alte Daten ins neue Modell quetschen Datenbankprogrammierung 6
R Mongodb Daten werden immer überschrieben Datenbankprogrammierung 7
R Mongodb Daten in einem bestimmten Document speichern Datenbankprogrammierung 1
OnDemand Daten auf mehrere Tabellen aufteilen oder Spalten nutzen Datenbankprogrammierung 2
B Daten HSQL-DB Datenbankprogrammierung 2
V H2 ManyToMany wie speichere ich die Daten? Datenbankprogrammierung 10
thobren Projekt SQlite! Wie kann ich auf auf SQlite Daten zugreifen? Datenbankprogrammierung 4
OnDemand Daten verschlüsseln Datenbankprogrammierung 42
L Oracle Daten in Häppchen selektieren Datenbankprogrammierung 5
L Oracle Daten von Oracle zu MSSQL übertragen Datenbankprogrammierung 4
D Daten aus der Firebase-Echtzeitdatenbank abfragen und in Variablen speichern (JAVA) Datenbankprogrammierung 0
Z Ausgabe nur bestimmter Daten Datenbankprogrammierung 6
E netbeans - jsp Daten in Datenbank hinzufügen Datenbankprogrammierung 2
N Java Abfrage über GUI, Daten hinzufügen Datenbankprogrammierung 54
Kirby.exe Vorschläge zur Verschlüsselung von Daten in der DB Datenbankprogrammierung 2
T Java Spiel Daten speichern Datenbankprogrammierung 1
LimDul H2 Embedded DB und Gigabytes an Daten Datenbankprogrammierung 0
C Datenbank anlegen und über eine Website mit Daten füllen? Datenbankprogrammierung 25
R Wie mit zu viele Daten umgehen? Datenbankprogrammierung 2
F MySQL Wie speichere ich Daten zeitlich abhängig? Datenbankprogrammierung 4
T Oracle Normalisierung und Daten splitten Datenbankprogrammierung 1
JG12111989 DB-Daten werden falsch dargestellt Datenbankprogrammierung 7
K H2 Daten in die H2 console DB eintragen Datenbankprogrammierung 2
L SQLite Ändern der Daten in einem UNIQUE Feld Datenbankprogrammierung 1
S Daten von SQLite Datenbank nutzen Datenbankprogrammierung 5
P JSP - Daten aus 2 Tabellen in eine neue Tabelle einfügen Datenbankprogrammierung 1
L Oracle Daten von einem Server zum andere kopieren Datenbankprogrammierung 24
P Daten in eine mySQL Datenbank einfügen Datenbankprogrammierung 4
L MySQL Vergleichen von Array-Inhalt, Ausgabe gleicher Daten Datenbankprogrammierung 3
W Daten in Java intern abfragen Datenbankprogrammierung 1
G MySQL Java Problem: Nullpointer Exception obwohl Daten vorhanden sind? Datenbankprogrammierung 2
W Daten aus einer Datei von einem VServer auslesen Datenbankprogrammierung 1
I MySQL Datenbankstruktur angleichen - Daten behalten Datenbankprogrammierung 7
O JDBC Daten in zwei Tabellen mit zwei foreach-Schleifen einfügen (insert into) Datenbankprogrammierung 1
P LDAP: Daten eintragen funktioniert nicht Datenbankprogrammierung 7
B MySQL LogIn Daten im Code verstecken Datenbankprogrammierung 3
O mit Multi-Thread Daten aus Datenbank lesen und schreiben Datenbankprogrammierung 22
F Daten verdichten Datenbankprogrammierung 0
Z Finde den Fehler: Daten aus einer Access-Datenbank lesen Datenbankprogrammierung 12
B Daten aus DB in Word Dokument Datenbankprogrammierung 2
D Aktualisierung einer ListView mit Daten aus MySQL-DB Datenbankprogrammierung 5
D Daten posten auf RestApi (Mongodb/NoSQL) Datenbankprogrammierung 0
I Fehler bei Ausgabe der Daten aus der DB Datenbankprogrammierung 3
OnDemand MySQL Daten aktualisieren Datenbankprogrammierung 6
D Daten von einem Server in eigenem Java-Programm benutzen Datenbankprogrammierung 6
M Vergleich von Daten in verschiedenen Tabellen Datenbankprogrammierung 1
S Daten aus Form in Datenbank nur einmal eintragen Datenbankprogrammierung 2
6 JBDC Daten verschlüsseln? Datenbankprogrammierung 2
F MySQL Daten ändern über Java Datenbankprogrammierung 3
G SQLite Daten aus SQLite DB in andere SQLite DB importieren Datenbankprogrammierung 4
H Grosse Menge an Daten in eine Datenbank Datenbankprogrammierung 32
M Daten nachträglich hinzufügen Datenbankprogrammierung 6
2 MySQL Daten aus einer Array auslesen und MySQL Statment erstellen. Datenbankprogrammierung 5
E Daten einer SQL-Datenbank aus Combobox in labels schreiben Datenbankprogrammierung 6
N HSQLDB Daten Auslesen Datenbankprogrammierung 3
O Viele Verbindungen-Exception bei insert Daten zur MySQL-Datenbank Datenbankprogrammierung 2
P MySql daten in leeren jtable übertragen Datenbankprogrammierung 5
SexyPenny90 SQL Daten sortieren und top 5 ausgeben Datenbankprogrammierung 7
L Hibernat will Daten nicht einfügen??? Datenbankprogrammierung 2
B MySQL DB Daten aktualisieren Datenbankprogrammierung 9
D MySQL Daten werden aus Datenbank gelesen, obwohl sie dort gar nicht angekommen sind Datenbankprogrammierung 8
Kenan89 Oracle Daten einer Tabelle in Array speichern Oracle Datenbankprogrammierung 10
L SQLite Daten werden nicht in die Tabelle eingefügt Datenbankprogrammierung 7
D Übersichtliche Zuweisung von Daten in Tabellen Datenbankprogrammierung 17
C ResultSet enthält nicht alle Daten Datenbankprogrammierung 4
A Problem mit Eintragen von Daten in eine Datenbank mittels DAO Datenbankprogrammierung 4
J Daten synchronisieren in Multi-Client-Anwendungen (Hibernate) Datenbankprogrammierung 6
S JPA: DB Schema ändern und Daten nicht verlieren - wie? Datenbankprogrammierung 5
T MySQL Select: Zusammenfassen von Daten und bilden von Durchschnitt? Datenbankprogrammierung 4
F Daten in die DB hinzufügen Datenbankprogrammierung 7
H Klasse welche Mysql Daten zurück gibt Datenbankprogrammierung 18
S JPA: Problem mit Update von Daten Datenbankprogrammierung 7
H Daten in/aus Datenbank schreiben Datenbankprogrammierung 2
M DropDownBoxen mit MySQL Daten füllen Datenbankprogrammierung 3
E MySQL Daten in die Datenbank eingeben via Java Programm Datenbankprogrammierung 3
F ORA 17410 Keine weiteren Daten aus Socket zu lesen Datenbankprogrammierung 2
B Daten aus Datenbank holen Datenbankprogrammierung 6
T Problem beim schreiben von daten Datenbankprogrammierung 4
N Daten aus Datenbank abfragen und anzeigen in der Praxis?? Datenbankprogrammierung 2
G MySQL Bekomme keine Daten. Datenbankprogrammierung 7
L CLOB-Daten werden beim Einfügen in die Datenbank geändert? Datenbankprogrammierung 5
Gossi Oracle 2 Daten (Datum) vergleichen Datenbankprogrammierung 6
W MySQL Daten aus bestimmter Spalte lesen Datenbankprogrammierung 2
E MySQL Befüllen einer MySQL DB mit großen Daten Datenbankprogrammierung 6
J Doppelte Daten in Spalte, nur die erste abrufen wie? Datenbankprogrammierung 15
P Daten aus MySql Datenbank lesen??? Datenbankprogrammierung 6
J Daten vergleichen Datenbankprogrammierung 10
S Daten einer Tabelle vergleichen und ggs neuen Wert einfügen Datenbankprogrammierung 8
X Daten einer DatenbankTabelle in JTable darstellen Datenbankprogrammierung 13
T Designfrage: DB-Daten direkt oder verzögert speichern Datenbankprogrammierung 2
Dragonfire Daten aus jsp Datei in datenbank speichern Datenbankprogrammierung 15
A Daten von Webshop einlesen Datenbankprogrammierung 5
S Daten aus jTextfiled in DB schreiben - SQL Befehl Datenbankprogrammierung 2
T Daten aus DB in variable Zahl an Variablen speichern Datenbankprogrammierung 18
A Datenbankanbindung an mySQL und Ein-/Auslesen der Daten Datenbankprogrammierung 4
D Vector mit Daten aus der Datenbank füllen Datenbankprogrammierung 7
G Daten aus ResultSet in String-Liste Datenbankprogrammierung 13
S Fehler beim Auslesen von Daten Datenbankprogrammierung 6
D Keine Ausgabe der Daten Datenbankprogrammierung 3
G Daten schneller aus einer DB auslesen Datenbankprogrammierung 9

Ähnliche Java Themen

Neue Themen


Oben