mediengestalter.info
FAQ :: Mitgliederliste :: MGi Team

Willkommen auf dem Portal für Mediengestalter

Aktuelles Datum und Uhrzeit: Do 28.03.2024 20:37 Benutzername: Passwort: Auto-Login

Thema: SQLLite: Differenzen zwischen Timestamps v. Datensäzen vom 30.07.2010


Neues Thema eröffnen   Neue Antwort erstellen MGi Foren-Übersicht -> Programmierung -> SQLLite: Differenzen zwischen Timestamps v. Datensäzen
Autor Nachricht
qualidat
Threadersteller

Dabei seit: 14.09.2006
Ort: Eichwalde bei Berlin
Alter: 63
Geschlecht: Männlich
Verfasst Fr 30.07.2010 22:26
Titel

SQLLite: Differenzen zwischen Timestamps v. Datensäzen

Antworten mit Zitat Zum Seitenanfang

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
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
remote

Dabei seit: 10.11.2006
Ort: /var/www/
Alter: 109
Geschlecht: Männlich
Verfasst Fr 30.07.2010 23:08
Titel

Antworten mit Zitat Zum Seitenanfang

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
  View user's profile Private Nachricht senden
Anzeige
Anzeige
bacon

Dabei seit: 24.10.2007
Ort: -
Alter: -
Geschlecht: -
Verfasst Sa 31.07.2010 13:25
Titel

Antworten mit Zitat Zum Seitenanfang

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
  View user's profile Private Nachricht senden
remote

Dabei seit: 10.11.2006
Ort: /var/www/
Alter: 109
Geschlecht: Männlich
Verfasst Sa 31.07.2010 14:03
Titel

Antworten mit Zitat Zum Seitenanfang

* Keine Ahnung... *

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
  View user's profile Private Nachricht senden
qualidat
Threadersteller

Dabei seit: 14.09.2006
Ort: Eichwalde bei Berlin
Alter: 63
Geschlecht: Männlich
Verfasst So 01.08.2010 11:18
Titel

Antworten mit Zitat Zum Seitenanfang

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 ...
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
remote

Dabei seit: 10.11.2006
Ort: /var/www/
Alter: 109
Geschlecht: Männlich
Verfasst So 01.08.2010 14:39
Titel

Antworten mit Zitat Zum Seitenanfang

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?
  View user's profile Private Nachricht senden
qualidat
Threadersteller

Dabei seit: 14.09.2006
Ort: Eichwalde bei Berlin
Alter: 63
Geschlecht: Männlich
Verfasst So 01.08.2010 19:19
Titel

Antworten mit Zitat Zum Seitenanfang

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
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
 
Ähnliche Themen Rechnen eines Timestamps in Stunden?
Neues Thema eröffnen   Neue Antwort erstellen
MGi Foren-Übersicht -> Programmierung


Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst an Umfragen in diesem Forum nicht mitmachen.