2010-04-21 3 views
3

Там находится одна таблица T (идентификатор целое, первичный ключ (идентификатор)
Я хочу параметризованный запрос, что данный идентификатор я:.
вернет следующий последовательный идентификатор,
если я = самый большой идентификатор в T, запрос должен возвращать наименьшее идентификатор в T (циклический)SQL: как выбрать следующий идентификатор данный идентификатор

+0

Любой конкретный вкус SQL? – Guffa

ответ

6

вы можете выбрать наименьшую идентификатор над значение @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

Dang это, медленные пальцы. –

+0

спасибо, именно то, что я искал, теперь мне нужно проверить, работает ли max/min на строках .. это так. –

+0

@Marcin: Макс и мин работают на строках, но он выполняет текстовое сравнение. Если у вас есть числовые значения, хранящиеся в виде строк, вы должны преобразовать их в числа в запросе, например, «2»> «10». – Guffa

1

Это, кажется, что вы ищете:

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

OP хочет, чтобы он снова возвращал наименьший ID, когда достигнут наибольший ID (циклический) ... – AdaTheDev

+0

Как это встречается циклическое поведение OP при id> = max? –

Смежные вопросы