我对减法和空值有疑问。这是我的代码,分别计算当前行中的值(子查询中的列值)与每个组中的上一个值(上一个DateTime)之间的减法:
WITH CTE (DateTime, Compteur, Valeur) AS
(
SELECT DateTime, Compteur, CASE WHEN Valeur<0 OR Valeur IS NULL THEN 0 ELSE Valeur END AS Valeur
FROM
(
SELECT DateTime, TagName AS Compteur
, Value - LAG(Value, 1, NULL) OVER (PARTITION BY TagName ORDER BY DateTime) AS Valeur
FROM History
WHERE TagName IN ('A','B')
AND DateTime >='2018-12-31 23:59:00'
AND wwRetrievalMode='Delta'
)t
WHERE t.DateTime >='2018-12-31 23:59:59'
)
SELECT DateTime, Compteur, Valeur INTO #tempcounters from CTE
但是,如果上一行的值为NULL,则减法将为NULL。为避免此问题,我想在减去之前将同一组中的所有NULL值替换为以前的非NULL值。这是示例:
|---------------------|------------------|-----------------|
| DateTime | Compteur | Valeur
|---------------------|------------------|-----------------
| 15.04.2019 16:51:30| A | 10
|---------------------|------------------|-----------------
| 15.04.2019 16:52:42| A | NULL
|---------------------|------------------|-----------------
| 15.04.2019 16:53:14| A | NULL
|---------------------|------------------|-----------------
| 15.04.2019 17:52:14| A | 15
|---------------------|------------------|-----------------
| 15.04.2019 16:51:30| B | 6
|---------------------|------------------|-----------------
| 15.04.2019 16:52:42| B | 9
|---------------------|------------------|-----------------
| 15.04.2019 16:53:14| B | NULL
|---------------------|------------------|-----------------
| 15.04.2019 17:52:14| B | 15
|---------------------|------------------|----------------
新表应如下所示:
|---------------------|------------------|-----------------|
| DateTime | Compteur | Valeur
|---------------------|------------------|-----------------
| 15.04.2019 16:51:30| A | NULL
|---------------------|------------------|-----------------
| 15.04.2019 16:52:42| A | 0
|---------------------|------------------|-----------------
| 15.04.2019 16:53:14| A | 0
|---------------------|------------------|-----------------
| 15.04.2019 17:52:14| A | 5
|---------------------|------------------|-----------------
| 15.04.2019 16:51:30| B | NULL
|---------------------|------------------|-----------------
| 15.04.2019 16:52:42| B | 3
|---------------------|------------------|-----------------
| 15.04.2019 16:53:14| B | 0
|---------------------|------------------|-----------------
| 15.04.2019 17:52:14| B | 6
|---------------------|------------------|----------------
欢迎任何帮助!
答案 0 :(得分:0)
使用合并
<Rowset>