Вычислить разницу двух столбцов и вывести результат в другом столбце
Цель - попытка рассчитать разницу между месяцами на основе двух критериев: номера строки и идентификатора человека.
Я не уверен, как получить разницу
Разница в месяцах должна рассчитываться на основе идентификатора человека и номера строки,
Чем выше число, тем больше значение месяца
Вот данные в rextester.
Текущие данные
Результат
2 ответа
Решение
Я думаю lag()
делает то, что вы хотите:
select rownum, personid, month,
(month -
lag(month) over (partition by personid order by month)
) as diff
from t;
Обратите внимание, что для первого ряда diff
будет NULL
скорее, чем 'First Time'
,
Вы можете проверить это здесь.
Я не хочу красть гром Гордона здесь, потому что он сделал сложную роль.
Вот дополнительный бит, преобразующий NULL в "Первый раз".
create table #pivottabledata(Rownum int, PersonId int, Month int);
insert into #pivottabledata values(1,123,1);
insert into #pivottabledata values(2,123,2);
insert into #pivottabledata values(3,123,4);
insert into #pivottabledata values(4,123,5);
insert into #pivottabledata values(5,123,12);
insert into #pivottabledata values(1,222,1);
insert into #pivottabledata values(2,222,3);
insert into #pivottabledata values(3,222,4);
select * from #pivottabledata;
with cte (rownum,personid,month,diff) AS
(
select rownum, personid, month,
(month -
lag(month) over (partition by personid order by month)
) as diff
from #pivottabledata
)
SELECT rownum personid, month,
ISNULL(CAST(diff AS VARCHAR(max)), 'First Time') as diff
from cte;