Добавьте предыдущий счетчик загрузки, используя текущий счетчик и столбец метки времени - PullRequest
1 голос
/ 10 марта 2020

У меня есть таблица со следующими столбцами

id, timestamp, current load count, previous load count

, и в ней много строк. У меня есть значения для всех первых трех столбцов, но для «подсчета предыдущей загрузки» мне нужно получить подсчет даты за один день до подсчета текущего подсчета нагрузки.

См. Изображение ниже ( пример таблицы) для просмотра примера таблицы

Например: предыдущий счетчик нагрузки id: 4 - это счетчик, совпадающий с текущим счетчиком нагрузки id: 5.

Есть ли в любом случае запись SQL оператор для обновления предыдущего счетчика нагрузки?

enter image description here

Ответы [ 2 ]

0 голосов
/ 10 марта 2020

Если вам нужно ровно за день до этого, рассмотрите join:

select t.*, tprev.load_count as prev_load_count
from t left join
     t tprev
     on tprev.timestamp = dateadd(day, -1, t.timestamp);

(Примечание. Если временная метка содержит компонент времени, вам необходимо преобразовать в дата.)

lag() предоставляет данные из предыдущей строки . Если вы знаете, что у вас нет пробелов, то они эквивалентны. Однако, если есть разрывы, это возвращает NULL в дни после разрыва. Похоже, это то, что вы просите.

Вы можете включить это или lag() в обновление:

update t
    set prev_load_count = tprev.load_count
from t join
     t tprev
     on tprev.timestamp = dateadd(day, -1, t.timestamp);
0 голосов
/ 10 марта 2020

Можете ли вы попробовать это?

SELECT [id] 
      ,[timestamp]
      ,[current load count]
      ,LAG([current load count]) OVER (ORDER BY [timestamp] ASC, [id]) AS [previous load count]
FROM [table] 

Функцию LAG можно использовать для доступа к данным из предыдущей строки в том же наборе результатов без использования самостоятельного объединения.

Доступно после SQL Server 2012.

В примере я также добавил порядок на id - если у вас есть записи с одинаковой датой, но вы можете удалить их, если тебе нравится.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...