Подскажите пожалуйста, есть таблица в ms sql с нарастающим итогом (value), как можно из этого столбца сделать столбец с данными часовыми?

Рейтинг: 0Ответов: 1Опубликовано: 27.02.2023

введите сюда описание изображения

Я так понимаю нужно отнимать строки, от текущей предыдущую?

Ответы

▲ 0

Пример получения разности соседних значений, работоспособный на SQL Server 2005.

CREATE TABLE test (time INT, value INT);
INSERT INTO test VALUES
(1,2),(2,5),(3,4),(4,3),(5,7),(6,6),(7,3),(8,8),(9,4);
SELECT * FROM test;
time value
1 2
2 5
3 4
4 3
5 7
6 6
7 3
8 8
9 4
SELECT t1.time, t1.value, t1.value - t2.value delta
-- из этой копии берём текущее значение
FROM test t1
-- из этой копии берём предыдущее значение
LEFT JOIN test t2 ON t1.time > t2.time
-- проверяем, что нет промежуточных записей
WHERE NOT EXISTS (
  SELECT NULL
  FROM test t3
  WHERE t1.time > t3.time
    AND t3.time > t2.time
);
time value delta
1 2 null
2 5 3
3 4 -1
4 3 -1
5 7 4
6 6 -1
7 3 -3
8 8 5
9 4 -4

fiddle