Berechnung der Distanz von 2 Datumsfeldern aus Tabelle

shellycooper

Benutzer
Beiträge
6
Hallo,

ich stehe vor einem kleinen Problem und hoffe Ihr habt eine Idee: ich habe eine Tabelle in der jeder Datensatz ein Materialstück darstellt. Dort wird jeder Erzeugungszeitpunkt an Aggregat 1-xx mit Zeitstempeln geloggt. ich brauche nun einen Befehl um die Distanz zwischen 2 Aggregaten zu ermitteln, genauer gesagt: Aggregat xx - direkter Vorgänger. Also wäre es im Grunde nötig den nächst jüngsten Zeitstempel unter den Erzeugungszeitpunkten zu finden.
Dabei sind die Aggregate nicht linear aufgebaut: es kann sein das 1 Stück nur das 1. und das letzte Aggregat durchlaufen hat.

Hat jemand eine Idee?
 
Werbung:
Hallo,

ich stehe vor einem kleinen Problem und hoffe Ihr habt eine Idee: ich habe eine Tabelle in der jeder Datensatz ein Materialstück darstellt. Dort wird jeder Erzeugungszeitpunkt an Aggregat 1-xx mit Zeitstempeln geloggt. ich brauche nun einen Befehl um die Distanz zwischen 2 Aggregaten zu ermitteln, genauer gesagt: Aggregat xx - direkter Vorgänger. Also wäre es im Grunde nötig den nächst jüngsten Zeitstempel unter den Erzeugungszeitpunkten zu finden.
Dabei sind die Aggregate nicht linear aufgebaut: es kann sein das 1 Stück nur das 1. und das letzte Aggregat durchlaufen hat.

Hat jemand eine Idee?

Siehe meine Antwort im anderen Forum. Bitte Fragen nicht überall stellen...
 
Werbung:
In etwa so könnte es gehen (MSSQL Syntax):
Code:
CREATE TABLE test(pk UNIQUEIDENTIFIER,agg1 DATETIME,agg2 DATETIME,agg3 DATETIME);
INSERT INTO test VALUES ('56C3B162-01B4-4AF7-B595-CE4EF8CEF962','2014-10-12 09:01:49.993','2014-10-12 09:02:02.540','2014-10-12 09:02:25.400');
INSERT INTO test VALUES ('78EF0EA0-3B8C-4CF3-81A9-1D03801031D3','2014-10-12 09:02:41.383',NULL,'2014-10-12 09:03:17.230');

WITH t AS (
SELECT    ROW_NUMBER() OVER (PARTITION BY pk ORDER BY zeit) AS zeile,
        pk,
        zeit,
        agg
FROM    (    SELECT    pk,
                    agg1 AS zeit,
                    'AGG1' AS agg
            FROM    test
            WHERE    agg1 IS NOT NULL
            UNION ALL
            SELECT    pk,
                    agg2 AS zeit,
                    'AGG2' AS agg
            FROM    test
            WHERE    agg2 IS NOT NULL
            UNION ALL
            SELECT    pk,
                    agg3 AS zeit,
                    'AGG3' AS agg
            FROM    test
            WHERE    agg3 IS NOT NULL ) test1
        )
SELECT    t1.pk,
        t1.agg,
        t1.zeit,
        t2.agg,
        t2.zeit,
        datediff(ms,t1.zeit,t2.zeit) AS laufzeit
FROM    t t1
LEFT JOIN t t2
ON        t1.pk = t2.pk
AND        t1.zeile = t2.zeile - 1
 
Zurück
Oben