2010-04-21 41 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