Используйте аналитическую функцию LAG(<column>)
, чтобы получить «предыдущее» значение столбца, указанное в части OVER
, затем вычесть из него текущее значение и сделать его положительным числом, умножив его на -1
.Если предыдущее значение отсутствует (равно нулю), тогда принимается текущее значение.
Псевдокод будет:
If previous_order_value exists:
-1 * (previous_order_value - current_order_value)
Else
current_order_value
, где previous_order_value основан на том жеid & school_id и сортируется по enrollment_start_date в порядке возрастания
Код SQL:
select
id,
school_id,
enrollment_start_date,
[order],
coalesce(-1 * (lag([order]) over (partition by id, school_id order by enrollment_start_date ) - [order]), [order]) as diff
from yourtable
Также обратите внимание, что ключевое слово order
зарезервировано в SQL Server, чтоВот почему ваш столбец был создан с именем, заключенным в [ ]
.Я предлагаю использовать другое слово для этого столбца, если это возможно.