tags:

views:

83

answers:

2

There is one table T ( id integer, primary key ( id).
I want a parameterized query that, given id i:
will return next consecutive id,
if i = biggest id in T, query should return the smallest id in T (cyclical)

+1  A: 

This appears to be what you're looking for:

CREATE PROCEDURE dbo.ProcName
(
    @ID INTEGER
)
AS
SELECT TOP 1 id
FROM table
WHERE id > @ID
ORDER BY id
Dave
the OP wants it to return the smallest ID again when the greatest ID has been reached (cyclic)...
AdaTheDev
How is this meeting the OP's cyclical behavior when id>= max?
Jim Leonardo
+3  A: 

You can select the smallest id over the value @i (if any), and the smallest id, then get the largest:

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

Or perhaps:

select max(id)
from (
  select min(id) as id
  from T
  where id > @i
  union all
  select min(id)
  from T
) x
Guffa
Dang it, slow fingers.
Jim Leonardo
thanks, exactly what I was looking for, now I need to check if max/min works on strings.. it does.
Marcin K
@Marcin: Max and min works on strings, but it does a textual comparison. If you have numerical vales stored as strings, you have to convert them to numbers in the query, as for example '2' > '10'.
Guffa