Sql 如何获得显示当前行ID和前一行ID之间的减法结果的列表?

Sql 如何获得显示当前行ID和前一行ID之间的减法结果的列表?,sql,sql-server-2008,tsql,Sql,Sql Server 2008,Tsql,如何在MS SQL表中获得ID列表,其中的数字显示当前行ID和前一行ID之间的差异-假设我有“ORDER BY ID DESC” SELECT ID, ???? AS [CurrentID - PreviousID] FROM foo ORDER BY foo.ID DESC 尝试使用CTE和行号进行以下查询: 为什么左派加入?为什么不选择rn>1的位置?@DanBracuk,左连接用于选择所有行。要按照您的建议使用其中rn>1,min id必须始终为1,这是一个硬编码位。他可以根据需要修改

如何在MS SQL表中获得ID列表,其中的数字显示当前行ID和前一行ID之间的差异-假设我有“ORDER BY ID DESC”

SELECT ID, ???? AS [CurrentID - PreviousID]
FROM foo
ORDER BY foo.ID DESC
尝试使用CTE和行号进行以下查询:


为什么左派加入?为什么不选择rn>1的位置?@DanBracuk,左连接用于选择所有行。要按照您的建议使用其中rn>1,min id必须始终为1,这是一个硬编码位。他可以根据需要修改查询。你能举个例子吗?
create table foo (id int)

insert into foo values 
(1),(5),(8),(9)

;with cte as (
   select Id, row_number() over (order by id desc) rn
   from foo
)
select c1.id, c1.id-c2.id as [currentId - previousId]
from cte c1 
      left join cte c2 on c1.rn = c2.rn - 1
order by c1.rn

| ID | CURRENTID - PREVIOUSID |
-------------------------------
|  9 |                      1 |
|  8 |                      3 |
|  5 |                      4 |
|  1 |                 (null) |
SELECT
  ID,
  ID - coalesce(
                 (select max(ID) from foo foo2 where foo2.id<foo.id)
                , 0) as Diff
FROM foo
ORDER BY foo.ID DESC