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