2010-04-21 42 views
3

还有就是一个表T(ID整数,主键(id)
我想参数化查询选择一张ID,鉴于ID我:
将返回下一个连续的ID,
如果我在T =最大的ID,查询应返回最小的ID在T(周期性)SQL:如何给出一个ID

+0

SQL的任何具体的味道? – Guffa 2010-04-21 20:01:26

回答

6

您可以选择在最小的ID值@i(如果有的话)和最小的id,然后得到最大的值:

select max(id) 
from (
    select top 1 id 
    from T 
    where id > @i 
    order by id 
    union all 
    select top 1 id 
    from T 
    order by id 
) x 

或许:

select max(id) 
from (
    select min(id) as id 
    from T 
    where id > @i 
    union all 
    select min(id) 
    from T 
) x 
+0

当它,手指缓慢。 – 2010-04-21 20:03:47

+0

谢谢,正是我正在寻找的,现在我需要检查最大/最小值是否在字符串上工作..它的确如此。 – 2010-04-21 20:14:19

+0

@Marcin:Max和Min在字符串上工作,但它进行了文本比较。如果数字值存储为字符串,则必须将其转换为查询中的数字,例如'2'>'10'。 – Guffa 2010-04-22 04:48:37

1

这似乎是你在找什么:

CREATE PROCEDURE dbo.ProcName 
(
    @ID INTEGER 
) 
AS 
SELECT TOP 1 id 
FROM table 
WHERE id > @ID 
ORDER BY id 
+0

当最大ID已经达到(循环)时,OP希望它再次返回最小的ID ... – AdaTheDev 2010-04-21 20:02:46

+0

当id> = max时,这会议如何满足OP的周期性行为? – 2010-04-21 20:03:28