2010-04-30 74 views

回答

5

此:

WITH q AS 
     (
     SELECT *, ROW_NUMBER() OVER (PARTITION BY field2 ORDER BY field3 DESC) AS rn 
     FROM table1 
     ) 
SELECT * 
FROM q 
WHERE rn = 1 

或该:

SELECT q.* 
FROM (
     SELECT DISTINCT field2 
     FROM table1 
     ) qo 
CROSS APPLY 
     (
     SELECT TOP 1 * 
     FROM table1 t 
     WHERE t.field2 = qo.field2 
     ORDER BY 
       t.field3 DESC 
     ) q 

根据field2基数,该第一或第二查询可以是更有效的。

请参阅本文的详细信息:

+0

感谢Quassnoi。第一个返回一个额外的“rn”列,请编辑它如下:...... WITH q AS(SELECT *,ROW_NUMBER()OVER(PARTITION BY field2 ORDER BY field3 DESC)AS rn FROM table1)SELECT Field1 ,Field2,Field3,Field4 FROM q WHERE rn = 1 ......但第二个很棒,文章也很棒。非常感谢。 – 2010-04-30 19:18:51

相关问题