SQL Server:查询给定参数的下一个最低值

SQL Server:查询给定参数的下一个最低值,sql,sql-server-2000,Sql,Sql Server 2000,我有下表 GroupID Sequence Name 1 10 Mary 1 25 Jack 1 17 Jill 2 3 Peter 2 42 Henry 2 50 Paul 下面的查询返回一行,其中给定组1的下一个最低序列为10,给定序列为17 SELECT

我有下表

GroupID Sequence    Name
1             10        Mary
1             25        Jack
1             17        Jill
2              3        Peter
2             42        Henry
2             50        Paul
下面的查询返回一行,其中给定组1的下一个最低序列为10,给定序列为17

SELECT TOP 1 *
FROM   dbo.customerassignmentgroup
WHERE  groupid = 1
       AND SEQUENCE < (SELECT MAX(SEQUENCE)
                       FROM   dbo.customerassignmentgroup i
                       WHERE  i.groupid = customerassignmentgroup .groupid)
       AND manualsequence < 17
ORDER  BY SEQUENCE DESC
还有别的办法吗?我试图避免

其中i.groupid= CustomeraSignmentGroup.groupid

在内部查询中,因为我需要将其转换为亚音速查询


注意:我的数据库是SQL Server 2000

如果您使用ORDER BY,您只需执行以下操作:

SELECT TOP 1 *
FROM   dbo.customerassignmentgroup
WHERE  groupid = 1 AND SEQUENCE < 17
ORDER  BY SEQUENCE DESC
您可以通过执行以下操作来避免使用排序:

SELECT *
FROM   dbo.customerassignmentgroup t1
WHERE  t1.groupid = 1
   AND t1.SEQUENCE = (SELECT MAX(t2.SEQUENCE)
                   FROM   dbo.customerassignmentgroup t2
                   WHERE  t2.groupid = 1 AND t2.SEQUENCE < 17)

有另一种方法可以做到这一点,但我不知道这是否有助于亚音速。基本上,将子查询移动到FROM中


你能用一个存储过程吗?我试图避免…看起来我可能会用它。
SELECT TOP 1 *
FROM   dbo.customerassignmentgroup i
       INNER JOIN (SELECT MAX(SEQUENCE) SEQUENCE, groupid
                       FROM   dbo.customerassignmentgroup
                       GROUP BY groupid) maxSeq
       ON  i.groupid = maxSeq.groupid
          and i.SEQUENCE < maxSeq.SEQUENCE 
          and i.groupid = maxSeq.groupid

WHERE  groupid = 1

       AND manualsequence < 17
ORDER  BY SEQUENCE DESC