Добавление столбца в таблицу из предыдущей строки в T-SQL - PullRequest
0 голосов
/ 22 сентября 2019

Учитывая строку со столбцом временной метки и некоторым столбцом значений (с устройства), которые уже находятся в таблице в базе данных SQL Azure, я хочу добавить новый столбец в строку из самой последней записи, которая соответствует определенным критериям (самый последний будет определяться столбцом метки времени).Критерием является ли значение попадает в диапазон (между 95 и 5).Я хочу сделать это для каждой строки.

Вот таблица ввода:

ts (Timestamp)       value (integer)
------------------------------------
2019-09-22 00:00:00  90
2019-09-21 23:10:05  75
2019-09-21 23:09:00  85
2019-09-21 22:09:00  00
2019-09-21 14:09:00  70

Теперь я хочу добавить столбец в эту таблицу:

ts (Timestamp)       value prev_value
---------------------------------------
2019-09-22 00:00:00  90    75
2019-09-21 23:10:05  75    85
2019-09-21 23:09:00  85    70
2019-09-21 22:09:00  00    70
2019-09-21 14:09:00  70    NULL

Я пробовал разные операторы SQL, но пока не добился успеха.Спасибо!

1 Ответ

1 голос
/ 22 сентября 2019

Таким образом, вам нужно что-то вроде lag, но с условием.
Самый простой способ сделать это - использовать коррелированный подзапрос.

Сначала создайте изаполнить образец таблицы ( Пожалуйста, сохраните этот шаг в ваших будущих вопросах):

DECLARE @T AS TABLE
(
    ts datetime2,
    [value] int
)

INSERT INTO @T (ts, [value]) VALUES
('2019-09-22T00:00:00', 90),
('2019-09-21T23:10:05', 75),
('2019-09-21T23:09:00', 85),
('2019-09-21T22:09:00', 00),
('2019-09-21T14:09:00', 70);

Запрос:

SELECT ts,
       value,
       (
           SELECT TOP 1 value
           FROM @T T1
           WHERE T0.ts > T1.ts
           AND T1.value >= 5
           AND T1.value <= 95
           ORDER BY t1.ts DESC
       ) As prev_value
FROM @T T0
ORDER BY ts DESC

Результаты:

ts                      value   prev_value
2019-09-22 00:00:00     90      75
2019-09-21 23:10:05     75      85
2019-09-21 23:09:00     85      70
2019-09-21 22:09:00     0       70
2019-09-21 14:09:00     70      NULL
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...