Подскажите пожалуйста, есть таблица в ms sql с нарастающим итогом (value), как можно из этого столбца сделать столбец с данными часовыми?
Источник: Stack Overflow на русском
Пример получения разности соседних значений, работоспособный на 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 |