Разница диапазона номеров - PullRequest
0 голосов
/ 05 августа 2020

У меня вопрос. У меня есть образец данных, показанный ниже: мой вопрос: я хочу вычислить разницу между начальным номером второй строки (150) и конечным номером первой строки (100). Кто-нибудь может мне помочь, пожалуйста? Этот ответ сократит объем ручной работы, которую я делаю ежедневно.

введите описание изображения здесь

Спасибо

1 Ответ

0 голосов
/ 05 августа 2020

Это решение использует external apply для выборки предыдущей строки.

-- sample data
declare @mytable table
(
  Model nvarchar(5),
  StartingNo int,
  EndingNo int
);

insert into @mytable (Model, StartingNo, EndingNo) values
('X', 1, 100),
('X', 150, 200),
('Y', 10, 30),
('Y', 1, 5);

-- solution
select  t1.*,
        t3.EndingNo as 'PreviousEndingNo',
        t1.StartingNo - t3.EndingNo as 'Diff'
from @mytable t1
outer apply (   select top 1 t2.EndingNo            -- first row...
                from @mytable t2
                where t2.Model = t1.Model           -- ... with same model
                  and t2.StartingNo < t1.StartingNo -- ... that comes before current row
                order by t2.StartingNo desc ) t3    -- ... when sorting on start number
order by t1.Model, t1.StartingNo;

Это дает:

Model StartingNo  EndingNo    PreviousEndingNo Diff
----- ----------- ----------- ---------------- -----------
X     1           100         NULL             NULL
X     150         200         100              50
Y     1           5           NULL             NULL
Y     10          30          5                5
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...