Zur Beachtung - Programme & Quellcodes

Für die bereitgestellten Programme und Quellen gilt unser Copyright oder, falls explizit andere Regelungen angegeben sind, diese.

Wir raten in jedem Fall dazu, vorab ein Backup in einem Umfang zu erstellen, der die Wiederherstellung der Systeme im Fehlerfall sichert. Dies betrifft bei Active-Directory-integrierten Diensten auch das Active-Directory.

 

Die folgende T-SQL-Syntax kann verwendet werden, um zeitbezogen erfaßte Daten  zeitraumbasiert zu gruppieren und je Zeitraum den Anfangs- und Endwert und Minimum und Maximum zu ermitteln. Ausgang ist jeweils eine Tabelle mit drei Spalten: ID (Int, Identity), TIMESTAMP (datetime) und val (decimal).

 

SELECT
DO.ID
,START_TIME=DO.TIMESTAMP
,END_TIME=DC.TIMESTAMP
,OPEN_VAL=DO.VAL
,MIN_VAL=S2.MIN_VAL
,MAX_VAL=S2.MAX_VAL
,CLOSE_VAL=DC.VAL
FROM
DATA AS DO
INNER JOIN
(SELECT
MIN_ID=MIN(S1.ID)
,MAX_ID=MAX(S1.ID)
,MIN_VAL=MIN(S1.VAL)
,MAX_VAL=MAX(S1.VAL)
,S1.PART
FROM
(SELECT
ID
,[TIMESTAMP]
,VAL
,PART=60*(DATEDIFF(ss,'2016/01/01',[TIMESTAMP])/60)
FROM
DATA) AS S1
GROUP BY S1.PART) AS S2 ON DO.ID=S2.MIN_ID
INNER JOIN DATA AS DC ON S2.MAX_ID=DC.ID

 Erläuterung:

Zunächst werden die Datenaggregate über das partitionierte DateTime-Feld erzeugt und die Verknüpfungs-IDs für den jeweils ersten und letzten Tupel in zeitlicher Reihenfolge erzeugt. Über die Verknüpfungs-IDs werden dann die jeweils ersten und letzten Tupel verbunden. Der Wert "60" steht hier für 60 Sekunden (Datediff(ss...). Sowohl der Datepart-Bezeichner, als auch der Absolutwert können hier geändert werden, um das Darstellungsintervall zu variieren.