2011-05-03 40 views
3

我有以下表的SQL Server:查询下一个最低值对于给定的参数

GroupID Sequence Name 
1    10  Mary 
1    25  Jack 
1    17  Jill 
2    3  Peter 
2    42  Henry 
2    50  Paul 

下面的查询返回的行与给定组的下一个最低序列(10)(1)和一个给定的序列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 

有没有另外一种方法呢?我试图避免

WHERE i.groupid = customerassignmentgroup在内部查询.groupid

,因为我需要将其转换为一个查询在亚音速

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

+1

你可以使用存储过程吗? – Avitus 2011-05-03 17:14:31

+0

我试图避免这种情况......看起来我可能最终会使用它。 – 2011-05-03 17:15:40

回答

1

如果使用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) 
1

还有另一种方式来做到这一点,但我不知道,如果这亚音速帮助。基本上将子查询移入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 
相关问题