如何检索具有另一个公共字段的行(字段中的最大值)?

Ash*_*hir 2 sql sql-server select sql-server-2005

我有一张桌子; 让它被称呼table1; 包含以下字段和数据

替代文字http://img228.imageshack.us/img228/3827/45939084.png

我需要一个查询,返回Field3具有相同值的每组记录的最大值的记录Field2.这样查询返回:

alt text http://img87.imageshack.us/img87/62/48847706.png

如何使用SQL查询完成此操作?

Qua*_*noi 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
Run Code Online (Sandbox Code Playgroud)

或这个:

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
Run Code Online (Sandbox Code Playgroud)

根据field2基数,第一个或第二个查询可以更有效.

有关详细信息,请参阅此文章: