Autor |
Nachricht |
qualidat
Threadersteller
Dabei seit: 14.09.2006
Ort: Eichwalde bei Berlin
Alter: 63
Geschlecht:
|
Verfasst Fr 30.07.2010 22:26
Titel SQLLite: Differenzen zwischen Timestamps v. Datensäzen |
|
|
In ener SQLLite-Datenbank wird immer dann ein neuer Datensatz
eingetragen, wenn ein System (Druckmaschine) seinen Zustand ändert, z.B. von Rüsten auf
Fertigen oder von Fertigen auf Unterbrechen, von Unterbochen wieder auf
Fertigen usw.
Wie ich aus den Datensätzen, nachdem ich sie per SQL-Select aus der
Datenbank zurückgeholt habe, quasi "zu Fuß" die daraus resultierenden
Differenzen und Summen berechne, ist nicht die Frage, das ist die
"konventionelle" Lösung.
Die Frage ist, gäbe es ein SQL-Statement, dass es mir ermöglicht z.B.
die Summe all der Zeiten zu ermitteln, die zwischen einem
"Unterbrochen"-Status und dem darauffolgenden anderen Zustand liegen?
Kann man mit SQL überhaupt Berechnungen zwischen den Datensätzen einer
Ergebnismenge ausführen?
P.S. die Tabelle hat fogende ganz simple Struktur: Datum, Zeit, Status.
Die möglichen Stati sind:
- Aus
- Rüsten (d.h. Einrichten für neuen Auftrag)
- Rüsten unterbrochen (z.B. Probleme mit dem Materialdurchlauf)
- Fertigen
- Fertigen unterbrochen (z.B. Platte muss gewechselt werden)
Zuletzt bearbeitet von qualidat am Fr 30.07.2010 22:27, insgesamt 1-mal bearbeitet
|
|
|
|
|
remote
Dabei seit: 10.11.2006
Ort: /var/www/
Alter: 109
Geschlecht:
|
Verfasst Fr 30.07.2010 23:08
Titel
|
|
|
nein
edith:
zur klarstellung - grundsätzlich kann man via sql direkt durchaus berechnungen vornehmen und sich das ergebnis liefern lassen oder weiter verwursten.
Zuletzt bearbeitet von remote am Fr 30.07.2010 23:13, insgesamt 1-mal bearbeitet
|
|
|
|
|
Anzeige
|
|
|
bacon
Dabei seit: 24.10.2007
Ort: -
Alter: -
Geschlecht: -
|
Verfasst Sa 31.07.2010 13:25
Titel
|
|
|
Zitat: | Die Frage ist, gäbe es ein SQL-Statement, dass es mir ermöglicht z.B.
die Summe all der Zeiten zu ermitteln, die zwischen einem
"Unterbrochen"-Status und dem darauffolgenden anderen Zustand liegen?
Kann man mit SQL überhaupt Berechnungen zwischen den Datensätzen einer
Ergebnismenge ausführen?
|
Ohne das Schema zu kennen würde ich behaupten: Doch, mit Self-Joins und Aggregierung. Du musst die Zeiten ggf. noch nach unixtime o.Ä. umrechnen, damit du damit artihmetisch rumhampeln kannst.
Schematisch würde ich folgendermaßen starten und mich langsam rantasten:
Code: | SELECT MIN(b.time) - a.time FROM tabelle a, tabelle b
WHERE a.typ = unterbrochen
AND b.typ = unterbrochen
AND b.time > a.time
GROUP BY a.id; |
Ich bezweifle zwar dass es so direkt funktioniert, aber erstens fühle ich mich bei sowas immer ein wenig brainfucked so ganz ohne ausprobieren, und zweitens sollst Du ja auch noch ein wenig Spaß haben. Ich tippe jedenfalls aus dem Bauch heraus, dass man sowas durchaus in SQL formulieren kann...
AND c.time beween a.time and b.time
Zuletzt bearbeitet von bacon am Sa 31.07.2010 13:26, insgesamt 1-mal bearbeitet
|
|
|
|
|
remote
Dabei seit: 10.11.2006
Ort: /var/www/
Alter: 109
Geschlecht:
|
Verfasst Sa 31.07.2010 14:03
Titel
|
|
|
vielleicht verstehe ich die frage oder bacon ja falsch... geht es nicht um die summe aller leerlaufzeiten?
Zitat: | die Summe all der Zeiten zu ermitteln, die zwischen einem
"Unterbrochen"-Status und dem darauffolgenden anderen Zustand liegen |
|
|
|
|
|
qualidat
Threadersteller
Dabei seit: 14.09.2006
Ort: Eichwalde bei Berlin
Alter: 63
Geschlecht:
|
Verfasst So 01.08.2010 11:18
Titel
|
|
|
Es geht nich einfach um die Summe. Die Datensätze sind nach ihrem Timestamp geordnet. Es werden immer nur die Zeiten aufgezeichnet, wenn sich ein Status ändert, nicht dessen Dauer. Die Dauer muss aus der Differnez zum nächsten Datensatz ermittelt werden.
Es geht um die Summe der Differenzen der Timestamps bestimmter Statuswechsel, z.B. um die Summe aller Beginnzeiten des Status "Off" zu einem danach folgenden anderen Status (kann "Einrichten" oder "Fertigen" sein). Dadurch bekomme ich am Ende die Summe aller Off-Zeiten.
Oder anderes Beispiel: Die Summe aller Zeiten zwischen dem Status "Einrichten" und einem anderen Status, z.B. "Off" oder "Fertigen". Dadurch bekomme ich die Summe aller Einrichte-Zeiten. Klar?
Bisher mache ich das durch Analyse der in die Anwendung geladenen Daten, einfach konventionell "ausprogrammiert". Die Frage war nun, ob ich das evtl. auch der Datenbank aufhalsen kann, per clever desingntem SQL-Statement ...
|
|
|
|
|
remote
Dabei seit: 10.11.2006
Ort: /var/www/
Alter: 109
Geschlecht:
|
Verfasst So 01.08.2010 14:39
Titel
|
|
|
so hatte ich es verstanden... und imho ist das mit einem sql query nicht zu machen - du bräuchtest dazu ein rekursives select statement und das gibt es (soweit mir bekannt) in SQLite nicht. warum soll die logik eigentlich in die datenbank ausgelagert werden?
|
|
|
|
|
qualidat
Threadersteller
Dabei seit: 14.09.2006
Ort: Eichwalde bei Berlin
Alter: 63
Geschlecht:
|
Verfasst So 01.08.2010 19:19
Titel
|
|
|
remote hat geschrieben: | ... warum soll die logik eigentlich in die datenbank ausgelagert werden? |
Weil die Clients nur wenig Rechenleistung haben und wenig Netzwerktraffik erzeugen sollen. Muss ja auch nicht unbedingt, war nur so eine Idee ...
Zuletzt bearbeitet von qualidat am So 01.08.2010 19:19, insgesamt 1-mal bearbeitet
|
|
|
|
|
|
|
|
Ähnliche Themen |
Rechnen eines Timestamps in Stunden?
|
|