【发布时间】:2018-04-20 22:14:57
【问题描述】:
我有一张像下面这样的表格:
+----+----+-----+--------------+---------+
| C1 | C2 | C3 | TIMESTMP | MEASURE |
+----+----+-----+--------------+---------+
| A | AA | AAA | 201804200000 | 20 |
| A | AA | AAA | 201804200015 | 2 |
| A | AA | AAA | 201804200030 | 5 |
| A | AA | AAA | 201804200045 | null |
| A | AA | AAA | 201804200100 | null |
| A | AA | AAA | 201804200115 | 12 |
| … | … | … | … | … |
| A | AA | AAA | 201804202345 | 20 |
| B | BB | BBB | 201804200000 | 8 |
| B | BB | BBB | 201804200015 | null |
| B | BB | BBB | 201804200030 | 1 |
| … | … | … | … | … |
+----+----+-----+--------------+---------+
根据这 3 种情况,我必须将 MEASURE 字段中的每个值与其之前的值(通过在 TIMESTMP 字段中取前一刻钟获得)相加:
- 如果 MEASURE 中的当前值为 null,则 RESULT 为 null
- 如果 MEASURE 中的当前值不为空,并且其在 MEASURE 中的先前值不为空,则将这两个值相加
- 如果 MEASURE 中的当前值不为空,并且其在 MEASURE 中的先前值为空,则将 MEASURE 的当前值与其先前的非空值相加。
C1、C2、C3、TIMESTMP字段为key,求和必须在字段c1、c2、c3中具有相同值的记录之间。
结果应该是如下表:
+----+----+-----+--------------+---------+--------------------------------+
| C1 | C2 | C3 | TIMESTMP | MEASURE | RESULT |
+----+----+-----+--------------+---------+--------------------------------+
| A | AA | AAA | 201804200000 | 20 | 20 |
| A | AA | AAA | 201804200015 | 2 | 22 (2+20) |
| A | AA | AAA | 201804200030 | 5 | 7 (5+2) |
| A | AA | AAA | 201804200045 | null | null |
| A | AA | AAA | 201804200100 | null | null |
| A | AA | AAA | 201804200115 | 12 | 17 (12+5) |
| … | … | … | … | … | … |
| A | AA | AAA | 201804202345 | 20 | X (20+previous value not null) |
| B | BB | BBB | 201804200000 | 8 | 8 |
| B | BB | BBB | 201804200015 | null | null |
| B | BB | BBB | 201804200030 | 1 | 9 (1+8) |
| … | … | … | … | … | … |
+----+----+-----+--------------+---------+--------------------------------+
【问题讨论】: