有人可以帮我解决这种情况的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.
答案 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;