在SQL Server 2008 r2中,我有一列' Activity_ID'这是一个整数,可以有一系列的值(即20,21,22,28,29,37,38,41)。
我无法知道接下来会有什么Activity_ID。
有没有办法检查下一个最高的Activity_ID(一旦找到它就做X)?
中号
答案 0 :(得分:1)
在SQL Server 2012或更高版本中,您将使用lag
或lead
。在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