У меня есть вопрос, касающийся вычитания и нулевых значений.Вот мой код, который вычисляет вычитание между значением (значение столбца в подзапросе) в текущей строке и в предыдущем (предыдущий 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
|---------------------|------------------|----------------
Любая помощь приветствуется!