Werte-Berechnung
Berechnung von Werten beruhend auf aufeinander folgenden Zeilen
Wir berechnen die Differenz der Werte in der Spalte 'VAL' mit aufeinanderfolgenden Timestamps 'TS':
-
- TS | VAL
- --------------------+------
- 2007-01-01 12:34:56 | 100
- 2007-01-02 02:22:44 | 110
- 2007-04-22 10:24:34 | 150
Schritt 1: Mit Hilfe eines benannten Subselects berechnen wir Ränge der Zeilen basierend auf Timestamp-Werten
Schritt 2: Berechnung des gewünschten Ergebnisses durch Selbst-Join der Hilfstabelle basierend auf den vorher berechneten Rängen
-
- WITH tmp_rank AS
- (
- SELECT
- ts, val, ROW_NUMBER() OVER(ORDER BY ts) RANK
- FROM LAG)
- SELECT
- a.ts ts1,
- b.ts ts2,
- b.val - a.val diff
- FROM tmp_rank a,tmp_rank b
- WHERE a.RANK + 1 =b.RANK;
Ergebnis
-
- TS1 |TS2 |DIFF
- --------------------------|--------------------------|-----
- 2007-01-01 12:34:56.000000|2007-01-02 02:22:44.000000| 10
- 2007-01-02 02:22:44.000000|2007-04-22 10:24:34.000000| 40
EXASolution 3.0: Analytische Funktionen LEAD() und LAG()
-
- WITH tmp_combined AS
- (
- SELECT
- ts,
- val,
- LAG(val) OVER(ORDER BY ts) AS val_prev
- FROM LAG
- )
- SELECT
- ts,
- val,
- val - val_prev AS diff
- FROM tmp_combined;















