SQL - 如何选择列中的下一个值?

时间:2015-07-27 15:52:40

标签: sql sql-server sql-server-2008-r2

在SQL Server 2008 r2中,我有一列' Activity_ID'这是一个整数,可以有一系列的值(即20,21,22,28,29,37,38,41)。

我无法知道接下来会有什么Activity_ID。

有没有办法检查下一个最高的Activity_ID(一旦找到它就做X)?

中号

2 个答案:

答案 0 :(得分:1)

在SQL Server 2012或更高版本中,您将使用laglead。在2008年,您可以使用行号模拟相同的行为。我在这里猜测是因为你的问题并没有附带样本数据,但它可能看起来像这样:

;with CTE as 
  (select *
  , Row_Number() over (partition by Name order by ActivityCode) as RN 
  from MyTable)

select a.*, b.activitycode as NextHighestCode 
from CTE a
left join CTE b
on a.name = b.name
and a.RN = b.RN - 1

这将返回表中的值(将name替换为您拥有的任何实际列),以及每行的下一个最高活动代码。这可能无法以您期望的方式处理关联,因此如果您期望它们,您可能希望向partition子句添加更多列。

答案 1 :(得分:0)

  declare @tb table
  (
    orderNumber int identity(1,1),
    value int
  )

  insert into @tb values(20)
  insert into @tb values(21)
  insert into @tb values(22)
  insert into @tb values(28)
  insert into @tb values(29)
  insert into @tb values(37)
  insert into @tb values(38)
  insert into @tb values(41)



  declare @v table(
    activity_id int
  )

  insert into @v values(37)

    select 
        (select top 1 value from @tb t1 where  t1.value > v.activity_id)
     from @v v