如何在SQL中获得下一个最大的int值?

时间:2014-08-28 08:58:59

标签: sql sql-server

有人可以帮我解决这种情况的SQL查询。

我有一个带有代理键和业务键的表。例如,这个表:

ID ------ contact_id 

1 -------- 100 
2 -------- 100 
3 -------- 200
4 -------- 100 
5 -------- 100

有没有人知道查询以获取contact_id的下一个最大ID。我尝试了加入的东西,但我不知道下一个最大的id部分。

编辑:我不是指特定的contact_id,更一般来说可以用于所有人。

正如所建议的那样,我应该把预期结果放在帖子中。 Anonxen现在已经解决了这个问题,但是对于未来的参考/其他有类似问题的人来说: “next next value”是指每个contact_id的ID中的下一个int。我不是指contact_id的所有id号中最高的,而是指链接到该联系人的下一个id。因此,在示例中,它将跳过与contact_id无关的id,但它应该是以下数字。
我在id 1,并期望查询寻找下一个id,所以那将是2.但如果我在id 2,我想去id 4.

5 个答案:

答案 0 :(得分:0)

使用前N来选择一个结果,并为某个contact_id Ex:1添加条件,然后按ID排序以获得下一个最大ID:

select top(1) ID from table_name where ID> 1 order by ID

答案 1 :(得分:0)

DECLARE @ContactId INT
SET @ContactId = 100

;WITH ContactsCTE AS
(
    SELECT ID,
           Contact_ID,
           ROW_NUMBER()OVER(ORDER BY ID) AS rn
    FROM   Contacts
    WHERE  Contact_Id > @ContactId
)
SELECT ID,
       Contact_ID
FROM   ContactsCTE 
WHERE  rn = 1

答案 2 :(得分:0)

如果您需要指定contact_id的最高ID,请尝试以下操作:

select max(ID)
from <your_contacts_table>
where contact_id = <your_value>

例如:

select max(ID)
from contacts
where contact_id = 100

答案 3 :(得分:0)

我不确定您对contact_id 200的下一个值的期望是什么,因此在这种情况下,它将使用与下一个大<{1}}相同的<{1}} /强>

contact_id

答案 4 :(得分:0)

如果我理解你,应该这样做:)

---Supply the ID and the Contact_ID
DECLARE @ID INT = 1
    ,@C_ID INT = 100;


WITH OrdCte AS(

SELECT ID,Contact_ID,ROW_NUMBER() OVER(PARTITION BY Contact_ID ORDER BY ID) ord 
FROM #sample

) 
    SELECT B.ID,B.Contact_ID 
    FROM OrdCte A 
    JOIN OrdCte B 
    ON A.Contact_ID = B.Contact_ID
    WHERE A.Contact_ID = @C_ID AND A.ID = @ID AND A.ord+1 = B.ord;