Einzelnen Beitrag anzeigen

Dejan Vu
(Gast)

n/a Beiträge
 
#22

AW: zeitintervall abfrage

  Alt 17. Dez 2015, 06:56
Das Problem ist -wie so oft- das die Datenstruktur eine Auswertung erschwert, wenn nicht sogar unmöglich macht. Am einfachsten wäre es, eine Tabelle aller Minutenzeiten des Tages zu nehmen und mit einer Intervaltabelle zu verknüpfen. Mal sehen
Hmm.
Code:
select t1.Zeit as StartZeit
     , t2.Zeit as EndZeit
     , case when t2.Zeit - t1.Zeit > 10 minuten then 0 else 1 end as Produktiv
  from Tabelle t1 
  join Tabelle t2 on t1.ID = t2.ID-1
Liefert mir eine Tabelle mit Anfangs und Endzeit der Intervalle sowie der Information, ob das Interval Produktivzeit ist, oder nicht. Das mit dem 'case' geht in FB bestimmt anders.
Diese Tabelle nenne ich jetzt mal 'Intervalle'.
Jetzt habe ich eine Tabelle mit einer Spalte, in der einfach alle Datum+Uhrzeiten je Minute drinstehen. Pro Tag sind das 1440 Einträge. Pro Jahr ca. 400.000. Diese Tabelle erstellen wir uns einmal und parken sie in der DB. Wir nennen sie MinutenZeiten.
Nun liste ich mir für jede Minute des Tages auf, ob die Minute produktiv war oder nicht.
Code:
select m.Uhrzeit,
       i.Produktiv
from Minuten m join Intervalle i
 on m.Uhrzeit between i.StartZeit and i.EndZeit
Cool. Fehlt noch das Aggregat
Code:
select DatePart(Stunde, m.Uhrzeit) as Stunde
     , sum (Produktiv) as Produktiv
     , sum (1-Produktiv) as Unproduktiv
from Minuten m join Intervalle i
 on m.Uhrzeit between i.StartZeit and i.EndZeit
Group by DatePart(Stunde, m.Uhrzeit)
Fast fertig. Denn die Auswertung berücksichtigt nicht Arbeitsbeginn und -Ende. Diese Zeiten werden als 'Unproduktiv' markiert. Aus der Intervalltabelle müsste man sich jetzt noch die kleineste StartZeit und die größte Endzeit des jeweiligen Tages nehmen und das im Aggregat berücksichtigen.
  Mit Zitat antworten Zitat