2014-08-28 62 views
0

有人可以帮助我处理这种情况的SQL查询。如何获得SQL中下一个最大的int值?

我有一张带代理键和业务键的表。例如下表:

ID ------ contact_id 

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

有没有人知道一个查询来获取下一个最大的contact_id ID。我尝试了一些连接,但我不知道下一个最大的ID部分。

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

建议我应该把预期的结果放在帖子中。这个问题现在已经由Anonxen解决了,但是为了将来的参考/其他人也有类似的问题:
“下一个最大值”是指每个contact_id的下一个int值。我不是指contact_id的所有id号码中最高的,而只是与该联系人链接的下一个id。所以在这个例子中,它会跳过与contact_id无关的id,但它应该是下面的数字。
我在身份证1,并期望查询寻找下一个ID,所以这将是2.但是,如果我会在ID 2我想去ID 4.

+0

所以对于'ID' 1什么哟你期望成为下一个最大的价值? – 2014-08-28 09:43:34

+0

“contact_id”的下一个最大ID是什么意思*?确保包含预期的输出(以及更强大的输入)。此外,请显示正在尝试哪些查询并解释它们[不完全]如何工作。 – user2864740 2014-08-28 10:22:58

+0

@ user2864740这不是要反对你的评论,我只是想知道,因为我是新来的SO:你的意思是更强大的输入是什么意思?你是否期望更多的数据或专栏,例子?因为在我的情况下,我相信它实际上是与这个问题相关的所有数据(其余的是诸如姓名,出生日等的列)。我会考虑您的意见。 – Kim 2014-08-29 09:29:06

回答

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; 
+0

这就是我一直在寻找的!只有局部变量不应该总是相同,但我会稍微改变一下,它的工作效果很好。非常感谢! – Kim 2014-08-28 11:20:41

0

使用顶部N来选择一个由ID 1只,那么为了得到一个最大ID:结果并添加条件一定CONTACT_ID防爆如果你需要指定CONTACT_ID最高ID

select top(1) ID from table_name where ID> 1 order by ID 
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 
0

,试试这个:

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

例如:

select max(ID) 
from contacts 
where contact_id = 100 
+0

对不起,我首先描述它可能太模糊,我的意思是一般的contact_id列。 – Kim 2014-08-28 09:21:20

+0

表中最高的ID?如果是这样,你只需从我的查询中删除WHERE子句。 – 2014-08-28 09:25:37

+0

不,我的意思是我想获得contact_id的最高ID,但它不需要是100或任何其他int,我想以标准方式使用它,以便它可以用于所有contact_id。 – Kim 2014-08-28 09:31:20

0

我不知道你所期望的下一个大价值contact_id 200,所以在这种情况下,将使用相同的contact_id下一个大

Select Main.*,ISNULL(NextB.contact_id,Main.contact_id) as NextBig 
From TableName Main 
    Outer APPLY (Select contact_id 
        From TableName T 
        Where T.Id>Main.Id and T.contact_id >Main.contact_id) As NextB